上文講的古典加密演算法雖然很簡單,但是在密碼史上是使用最久的加密方式,歷史上由于算力有限,加上有學識的人有限,所以直到概率論出現后,古典密碼才開始破防,歸根結底,英文單詞中字母出現的頻率是不同的,e以12.702%的百分比占比最高,z只占到0.074%,感興趣的同學可以去百科查字母頻率詳細統計資料,如果密文數量足夠大,僅僅采用頻度分析法就可以破解,如果再加上現代計算機強大的算力,凱撒加密演算法更是不堪一擊,
后續人類不斷改進,在二戰時期涌現了新的思路與演算法,恩尼格瑪機就是二戰時期納粹德國使用的加密機器,非常經典,并且難以破譯,英國集全國之力進行破譯,參與破譯的人員有被稱為計算機科學之父、人工智能之父的圖靈,恩尼格瑪機使用的加密方式本質上還是移位和替代,只不過因為密碼表種類極多,破解難度高,同時加密解密機器化,使用便捷,恩尼格瑪機共有26個字母鍵和26個帶有字母的小燈泡,當按下鍵盤上的鍵時,加密后的密文字母所對應的小燈泡就會亮起來,依次記錄密文發送給接收者就實作了密文傳輸,接收者也用相同的恩尼格瑪機,依次輸入密文并獲取原文,密碼機內裝有“轉子”裝置,每按下鍵盤上的一個字母,“轉子”就會自動地轉動一個位置,相當于更換了一套密碼表,最開始“轉子”只有6格,相當于有6套密碼表,后來升級到了26格,即有26套密碼表,后來恩尼格瑪機由一個“轉子”升級到了多個“轉子”,是密碼表套數成指數級增長,最高水準恩尼格瑪機具有8個“轉子”,密碼表套數為26的8次方,達到了2000多億種,此時靠人工進行破譯就不太可能了,國內某抗日神劇中一個數學美女天才,靠幾張紙就破譯了真的只能是呵呵了,電影《模仿游戲》較為真實得復現了破解方法,就是采用了類似現代計算機的機械機器進行快速運算,
現代經典密碼學針對加解密問題,發展出幾個大的方向:
- 對稱加密
- 非對稱加密
- 散列
本文將簡單介紹對稱加密的python實作,先談主要的對稱加密演算法,主要有以下幾類:
- DES(資料加密標準,Data Encryption Standard),DES 應該是最早的現代密碼學演算法之一,它由美國政府提出,密鑰長度為56位,目前,它暴力破解56位密碼的時間,已經能控制在24小時內了,DES實際上是一個過時的密碼學演算法,目前已經不推薦使用了,關于DES,還有一點特別有意思,DES 包含一個關鍵模塊:S盒,其設計的原理一直沒有公開,因此,很多人都相信,這個S盒中存在后門,只要美國政府需要,就能夠解密任何DES密文,
- IDEA(國際資料加密演算法,International Data Encryption Algorithm),IDEA 由瑞士研究人員設計,密鑰長度為128位,對比于其他的密碼學演算法,IDEA的優勢在于沒有專利的限制,相比于DES和AES的使用受到美國政府的控制,IDEA的設計人員并沒有對其設定太多的限制,這讓 IDEA在全世界范圍內得到了廣泛的使用和研究,
- AES(高級加密標準,Advanced Encryption Standard),在DES被破解后,美國政府推出了AES演算法,提供了128位、192位和256位三種密鑰長度,通常情況下,我們會使用128位的密鑰,來獲得足夠的加密強度,同時保證性能不受影響,目前,AES是國際上最認可的密碼學演算法,在算力沒有突破性進展的前提下,AES在可預期的未來都是安全的,
- 國密標準或者自研加密演算法,
對稱密鑰能夠廣泛用于:
- 資料檔案與資料庫內容的加密,
- 網路傳輸的資訊加密,
- 硬體/內核/驅動級加密,例如基于檔案系統的加密等,
# pip install cryptography from cryptography.fernet import Fernet # 生成對稱密鑰 key = Fernet.generate_key() print(key) # 用密鑰加密 coder = Fernet(key) crymsg = coder.encrypt(b'what are you doing?') print(crymsg) # 用密鑰解密 plaintext = coder.decrypt(crymsg) print(plaintext)
代碼運行后,能夠看到加密后的密文比原文要長,實際運行時,密鑰一定要保存好,丟失了密文就基本解不出來了,當然暴力破解還是可以的,只不過代價巨大,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/528721.html
標籤:Python
上一篇:淺談PHP設計模式的注冊樹模式
下一篇:django撰寫cookie
