Python密码学:换位密码原理、加密与解密实现教程
本文详细介绍Python中换位密码(Transposition Cipher)的实现原理。通过柱状转置技术示例,演示如何将明文重新排列生成密文。教程包含使用split_len和pyperclip模块的完整加密与解密代码,解析列读取与行写入的逻辑,帮助开发者掌握基础密码学算法在Python中的应用。
换位密码
Transposition Cipher(换位密码)是一种加密算法,其核心机制在于重新排列明文字母的顺序以生成密文,而不改变字母本身。
示例
转置密码的一个简单示例是柱状转置密码。在此方法中,纯文本中的每个字符按指定的列宽水平写入表格,随后垂直读取字符以创建完全不同的密文。
考虑纯文本 'hello world',让我们应用简单的柱状转置技术,如图所示在

纯文本字符水平放置,密文以垂直格式创建为: 'holewdlo lr'。现在,接收方必须使用同一个表格将密文解密回纯文本。
代码
以下程序代码演示了柱状转置技术的基本实现 :
def split_len(seq, length):
return [seq[i:i + length] for i in range(0, len(seq), length)]
def encode(key, plaintext):
order = {
int(val): num for num, val in enumerate(key)
}
ciphertext = ''
for index in sorted(order.keys()):
for part in split_len(plaintext, len(key)):
try:ciphertext += part[order[index]]
except IndexError:
continue
return ciphertext
print(encode('3214', 'HELLO'))解释
- 使用函数 split_len(),我们可以拆分纯文本字符,可以按柱状或行格式放置。
- 编码方法有助于使用指定列数的密钥创建密文并通过读取每列中的字符来打印密文。
输出
程序代码对于柱状转置技术的基本实现,给出以下输出 :

注意 : 密码分析者观察到当进行转座技术时加密安全性的显着改善。他们还指出,使用相同的转置密码重新加密密文可以提高安全性。
以上,我们了解了Transposition Cipher。下面,我们将讨论它的加密。
Pyperclip
Python编程语言中 pyperclip 插件的主要用法是执行跨平台模块,用于将文本复制和粘贴到剪贴板。您可以使用如下所示的命令安装python pyperclip 模块
pip install pyperclip如果系统中已存在该要求,您可以看到以下输出 :

代码
用于加密转置密码的python代码,其中pyperclip是主要模块,如下所示 :
import pyperclip
def main():
myMessage = 'Transposition Cipher'
myKey = 10
ciphertext = encryptMessage(myKey, myMessage)
print("Cipher Text is")
print(ciphertext + '|')
pyperclip.copy(ciphertext)
def encryptMessage(key, message):
ciphertext = [''] * key
for col in range(key):
position = col
while position < len(message):
ciphertext[col] += message[position]
position += key
return ''.join(ciphertext) #Cipher text
if __name__ == '__main__':
main()输出
用于加密转置密码的程序代码,其中 pyperclip 是主模块提供以下输出 :

解释
- 函数 main()调用 encryptMessage(),其中包括使用 len 函数拆分字符并以柱状格式迭代它们的过程。
- 主函数在结尾处初始化以获得适当的输出。
解密转置密码的步骤
代码
请注意以下代码以便更好地理解解密转置密码。密码为 6 的消息转置密码的密文被提取为 Toners raiCntisippoh.
import math, pyperclip
def main():
myMessage= 'Toners raiCntisippoh'
myKey = 6
plaintext = decryptMessage(myKey, myMessage)
print("The plain text is")
print('Transposition Cipher')
def decryptMessage(key, message):
numOfColumns = math.ceil(len(message) / key)
numOfRows = key
numOfShadedBoxes = (numOfColumns * numOfRows) - len(message)
plaintext = float('') * numOfColumns
col = 0
row = 0
for symbol in message:
plaintext[col] += symbol
col += 1
if (col == numOfColumns) or (col == numOfColumns - 1 and row >= numOfRows - numOfShadedBoxes):
col = 0 row += 1 return ''.join(plaintext)
if __name__ == '__main__':
main()说明
密文和提到的密钥是作为输入参数的两个值,用于解码或解密通过以列格式放置字符并以水平方式读取它们的反向技术密文。
您可以以列格式放置字母,然后使用以下部分将它们组合或连接在一起代码 :
for symbol in message:
plaintext[col] += symbol
col += 1
if (col == numOfColumns) or (col == numOfColumns - 1 and row >= numOfRows - numOfShadedBoxes):
col = 0
row += 1
return ''.join(plaintext)输出
解密转置密码的程序代码给出以下输出;

以上就是python密码学换位密码及换位解密转置加密教程的详细内容,更多关于python密码学换位解密转置加密的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









