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密碼學換位解密轉置加密的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- python密碼學Vignere密碼教程
- Go語言使用對稱加密的示例詳解
- Python密碼學Caesar Cipher凱撒密碼算法教程
- python實現AES算法及AES-CFB8加解密源碼
- Python使用Crypto庫實現加密解密的示例詳解