一、凱撒密碼原理
??在密碼學中,愷撒密碼(英語: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