基于Python實現凱撒密碼的加解密

一、凱撒密碼原理

??在密碼學中,愷撒密碼(英語:Caesar cipher),是一種最簡單且最廣為人知的加密技術。它是一種替換加密的技術,明文中的所有字母都在字母表上向后(或向前)按照一個固定數目進行偏移后被替換成密文。


凱撒密碼示意圖

??如上圖所示,當偏移量是3的時候,所有的字母A將被替換成D,B變成E,以此類推,X被替換為A,Y被替換為B,Z被替換為C。

二、基于Python實現凱撒密碼

1. 凱撒密碼加解密流程圖

凱撒密碼加解密流程圖

2. 項目結構

??CaesarCipher.py 文件為程序主文件,ciphertext.txt 文件用來存放需要解密的內容,plaintext.txt 文件用來存放需要加密的內容,word_library.txt 文件為生成的一個本地詞典,用來對解密的結果進行正確率判斷,選出最正確的結果。


項目結構

3. 程序主邏輯

3.1 程序執(zhí)行菜單

程序執(zhí)行菜單

3.2 程序中主要函數

??下面為程序中定義的主要函數,具體代碼請參見源碼。

def con_input()
    """循環(huán)輸入函數"""

def input_con()
    """在輸入時實現循環(huán)輸入,空行停止"""

def write_txt(text)
    """運行結果保存文件函數"""

def letter_off()
    """固定值偏移量函數"""

def letter_off_ran()
    """隨機值偏移量函數"""

def save_return(text)
    """保存選擇及返回函數"""

def encryption(text, offset)
    """字符串形內容加密函數"""

def encryption_list(text, offset)
    """列表形內容加密函數"""

def decryption(text, decry_type, *args)
    """字符串形內容解密函數"""

def decryption_list(text, decry_type, *args)
    """列表形內容解密函數"""

def menu_3level()
    """解密方式菜單函數"""

4. 程序改進

??在運行長文本或者大文件時,程序運行時間比較久,對此進行優(yōu)化。


Python 中 list 的源碼

list方法的時間復雜度

??Python 中 list 數據類型實現是一個動態(tài)數組,其存儲結構采用的是線性表中的順序存儲,其查詢復雜度為O(n),隨著規(guī)模增大耗時間越來越高。


Python 中 set 的源碼

set方法的時間復雜度

??Python 中 set數據類型與dict數據類型類似,其存儲結構都采用的是散列表(hash表),保存hash值作為key,在最優(yōu)情況下查詢復雜度為O(1)。
??將原來在list中循環(huán)匹配的方法,改為在set中循環(huán)匹配或者使用set的求交集功能。對同一內容進行解密,使用 list 時用時為 1943.83 豪秒,而使用 set 后用時為 81.81 毫秒。

三、基于Python實現凱撒密碼加解密的源碼

??已將源碼上傳至GitHub Python 凱撒密碼加解密 源碼

Python 版本 : 3.7
IDE : Pycharm

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容