使用替換加密法時,明文訊息的字元替換成另乙個字元、數字或者符號。
一、凱撒加密法
凱撒加密法是替換方法中的乙個特例,訊息中的每個字母替換成向後三個字母的字母,例如明文atul變成密文dwxo。顯然凱撒加密法是一種非常脆弱的隱藏明文訊息的方案,要破解凱撒加密法,只需要逆轉凱撒加密過程即可,即把每個字母替換成向前三個字母的字母。其替換規律如下:ab
cdef
ghig
klmn
opqr
stuv
wxyz
defg
higk
lmno
pqrs
tuvw
xyza
bc其破解凱撒加密法的演算法流程如下:
讀取密文訊息中的每個字母,查詢如上**的第二行;
找到匹配時,將密文訊息如上方**中第一行同一列的對應字母;
對密文訊息中所有字元重複這個過程。
凱撒密碼的加解密的python**如下:
# 凱撒密碼
# 要加密的/解密的字串
message=
'my name is zhinen'
# 要加密或者解密的金鑰
key=
3#程式是加密還是解密
mode=
'encrypt'
# 設定為encrypt或者decrypt
# 可能要被加密的符號
symbols1=
'abcdefghigklmnopqrstuvwxyz'
symbols2=
'abcdefghijklmnopqrstuvwxyz'
#儲存訊息的加密或者解密形式
translated=
''for symbol in message:
#注意只能加解密symbols1 2字串中的符號
#如果為大寫字母
if symbol in symbols1:
symbolindex = symbols1.find(symbol)
#執行加解密
if mode==
'encrypt'
: translatedindex=symbolindex+key
elif mode==
'decrypt'
: translatedindex= symbolindex-key
# 如果需要執行回環
if translatedindex>=
len(symbols1)
: translatedindex=translatedindex-
len(symbols1)
elif translatedindex<0:
translatedindex=translatedindex+
len(symbols1)
translated=translated+symbols1[translatedindex]
#如果為小寫字元
elif symbol in symbols2:
symbolindex = symbols2.find(symbol)
#執行加解密
if mode==
'encrypt'
: translatedindex=symbolindex+key
elif mode==
'decrypt'
: translatedindex= symbolindex-key
# 如果需要執行回環
if translatedindex>=
len(symbols2)
: translatedindex=translatedindex-
len(symbols2)
elif translatedindex<0:
translatedindex=translatedindex+
len(symbols2)
translated=translated+symbols2[translatedindex]
else
:#新增為加解密的字元
translated=translated+symbol
#輸出translated的字串
print
(translated)
其示例的結果如下圖所示:
二、 凱撒加密法的改進版本
英語中有26個英文本母,明文中的字母,可以轉換成任何的有效字母,但是換本身是沒有意義的,所以,每個字母有25中替換可能。這樣要破譯改進的凱撒加密法,就不能用上述的演算法,其改進的破解演算法如下所述:
1.假設key為1;
2.讀取整個密文訊息;
3.將密文中每個字母轉換成字母表中相隔key的字母;
4.將key增加1;
5.如果key小於26,則轉第二步,否則停止。
從上述步驟可以得到25個結果,其中乙個是原先的明文訊息。其破解的演算法如下:
# 破解凱撒密碼
# 要加密的/解密的字串
#message='my name is zhinen'
message=
'pb qdph lv cklqhq'
# 要加密或者解密的金鑰
#key=1
#程式是加密還是解密
mode=
'decrypt'
# 設定為encrypt或者decrypt
# 可能要被加密的符號
symbols1=
'abcdefghigklmnopqrstuvwxyz'
symbols2=
'abcdefghijklmnopqrstuvwxyz'
for key in
range(1
,26):
#儲存訊息的加密或者解密形式
translated=
''for symbol in message:
#注意只能加解密symbols字串中的符號
#如果為大寫字母
if symbol in symbols1:
symbolindex = symbols1.find(symbol)
#執行加解密
if mode==
'encrypt'
: translatedindex=symbolindex+key
elif mode==
'decrypt'
: translatedindex= symbolindex-key
# 如果需要執行回環
if translatedindex>=
len(symbols1)
: translatedindex=translatedindex-
len(symbols1)
elif translatedindex<0:
translatedindex=translatedindex+
len(symbols1)
translated=translated+symbols1[translatedindex]
#如果為小寫字元
elif symbol in symbols2:
symbolindex = symbols2.find(symbol)
#執行加解密
if mode==
'encrypt'
: translatedindex=symbolindex+key
elif mode==
'decrypt'
: translatedindex= symbolindex-key
# 如果需要執行回環
if translatedindex>=
len(symbols2)
: translatedindex=translatedindex-
len(symbols2)
elif translatedindex<0:
translatedindex=translatedindex+
len(symbols2)
translated=translated+symbols2[translatedindex]
else
:#新增為加解密的字元
translated=translated+symbol
#輸出translated的字串
print
(translated)
其示例的輸出結果,如下圖所示,發現25個結果中有乙個正確結果:
密碼編碼學初探 傳統加密技術
密碼學 研究資訊加密 解密和破密的科學。包括密碼編碼學和密碼分析學。密碼編碼學 研究如何對明文進行編碼加密的科學。密碼分析學 研究如何破譯密碼的科學。基本術語 替代 置換 單錶替代 多表替代 柵欄密碼 轉輪機 隱寫術 abc defg hijk lm01 2345 6789 101112n opqr...
密碼編碼學初探 分組加密技術(DES AES)
基本術語 分組密碼 混淆 擴散 feistel結構 可逆對映 資料加密標準 des 64位 高階加密標準 aes 128位 流密碼 即一次只加密乙個位元組或者一位的加密方式。分組密碼 將明文分組作為整體加密,且常得到的是與明文等長的密文分組。可以發現流密碼,嚴重依賴加密金鑰。分組密碼與流密碼一樣,兩...
密碼學 密碼學中的安全性證明
安全性證明的定義是這樣的 所謂密碼演算法的安全性證明就是判定在乙個普通的攻擊模型中,密碼演算法和所依賴的可信密碼學演算法問題之間的規約關係,如果演算法的攻破 即攻擊者贏 意味著某一在密碼學中可信問題的解決,則說明該演算法是安全的,即安全性得到證明。第一次看這個概念,很懵,難道乙個可以攻破的密碼的演算...