python密碼學換位密碼及換位解密轉置加密教程
換位密碼
Transposition Cipher是一種加密算法,其中明文中的字母順序被重新排列以形成密文.在此過程中,不包括實際的純文本字母.
示例
轉置密碼的一個簡單示例是柱狀轉置密碼其中純文本中的每個字符都是水平寫入的,具有指定的字母寬度.密碼是垂直寫入的,它創(chuàng)建了一個完全不同的密文.
考慮純文本 hello world ,讓我們應用簡單的柱狀轉置技術,如圖所示在
純文本字符水平放置,密文以垂直格式創(chuàng)建為:holewdlo lr.現(xiàn)在,接收方必須使用同一個表將密文解密為純文本.
代碼
以下程序代碼演示了柱狀轉置技術的基本實現(xiàn) :
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'))
解釋
- 使用函數(shù) split_len(),我們可以拆分純文本字符,可以按柱狀或行格式放置.
- 編碼方法有助于使用指定列數(shù)的密鑰創(chuàng)建密文并通過讀取每列中的字符來打印密文.
輸出
程序代碼對于柱狀轉置技術的基本實現(xiàn),給出以下輸出 :
注意 : 密碼分析者觀察到當進行轉座技術時加密安全性的顯著改善.他們還指出,使用相同的轉置密碼重新加密密文可以提高安全性.
以上,我們了解了Transposition Cipher.下面,我們將討論它的加密.
Pyperclip
Python編程語言中 pyperclip 插件的主要用法是執(zhí)行跨平臺模塊,用于將文本復制和粘貼到剪貼板.您可以使用如下所示的命令安裝python pyperclip 模塊
pip install pyperclip
如果系統(tǒng)中已存在該要求,您可以看到以下輸出 :
代碼
用于加密轉置密碼的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 是主模塊提供以下輸出 :
解釋
- 函數(shù) main()調(diào)用 encryptMessage(),其中包括使用 len 函數(shù)拆分字符并以柱狀格式迭代它們的過程.
- 主函數(shù)在結尾處初始化以獲得適當?shù)妮敵?
解密轉置密碼的步驟
代碼
請注意以下代碼以便更好地理解解密轉置密碼.密碼為 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()
說明
密文和提到的密鑰是作為輸入?yún)?shù)的兩個值,用于解碼或解密通過以列格式放置字符并以水平方式讀取它們的反向技術密文.
您可以以列格式放置字母,然后使用以下部分將它們組合或連接在一起代碼 :
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密碼學換位密碼及換位解密轉置加密教程的詳細內(nèi)容,更多關于python密碼學換位解密轉置加密的資料請關注腳本之家其它相關文章!
相關文章
Python3+SQLAlchemy+Sqlite3實現(xiàn)ORM教程
這篇文章主要介紹了Python3+SQLAlchemy+Sqlite3實現(xiàn)ORM教程,需要的朋友可以參考下2021-02-02python學習基礎之循環(huán)import及import過程
python中的import語句是用來導入模塊的,下面這篇文章主要給大家介紹了關于python學習基礎之循環(huán)import及import過程的相關資料,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。2018-04-04