亲宝软件园·资讯

展开

python密码学换位解密转置加密

菜鸟教程 人气:0

换位密码

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'))

解释

输出

程序代码对于柱状转置技术的基本实现,给出以下输出 :

注意 : 密码分析者观察到当进行转座技术时加密安全性的显着改善.他们还指出,使用相同的转置密码重新加密密文可以提高安全性.

以上,我们了解了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 是主模块提供以下输出 :

解释

解密转置密码的步骤

代码

请注意以下代码以便更好地理解解密转置密码.密码为 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)

输出

解密转置密码的程序代码给出以下输出;

加载全部内容

相关教程
猜你喜欢
用户评论