Java加密與解密的藝術-對稱加密算法

解密算法是加密算法的逆運算,加密密鑰和解密密鑰相同。如果我們把Base64算法改良,將其字符映射表作爲密鑰保存,就可以把這個改良後的Base64算法作爲一種對稱加密算法來看。

DESede算法(又稱爲TrippleDES或3DES算法)翻譯成中文就是三重DES算法。
DES算法具有代表性,堪稱典範;DESede是DES算法的變種,AES算法則作爲DES算法的替代者;而IDEA算法作爲一種強加密算法,成爲電子郵件加密郵件PGP(Pretty Good Privacy)的核心算法之一。

DESede算法基於DES算法進行三重迭代,增加了算法安全性。

DES算法密鑰偏短,僅有56位,迭代次數偏少。19986年後,實用化DES算法破譯機的出現徹底宣告DES算法已不具備安全性。1999年NIST頒佈新標準,規定DES算法只能用於遺留加密系統。以當前計算機技術能力,經DES加密的數據在24小時內可能被破解。

DES算法也成爲最應學習的對稱加密算法,其地位堪比C語言在計算機語言中的地位。

我們知道,密鑰長度與安全性成正比,但Java 7僅支持56位密鑰長度,作爲補充,Bouncy Castle提供了64位長度密鑰支持。
Cipher.init(Cipher.ENCRYPT_MODE,secretKey); init方法中的模式由’Cipher.ENCRYPT_MODE’改爲’DECRYPT_MODE’則可以作爲解密處理。

在實際應用中,密文通常以二進制數據傳輸/存儲,而密鑰通常會被轉換爲可見字符存儲。

DES算法在設計上的漏洞已經不能通過單純地增加密鑰長度來彌補,這引發了對稱加密算法研發競賽。DESede和AES正是這場競賽中具有代表性的算法。

DESede算法處理速度較慢,密鑰計算時間較長,加密效率不高等問題使得對稱加密算法的發展仍不容樂觀。

DESede算法將密鑰長度增至112位或168位,抗窮舉能力顯著增強,單核心仍是DES算法。

除了將密鑰材料實現類由DESKeySpec類轉換爲DESedeKeySpec類外,DESede算法與DES算法實現的主要差別在於算法、密鑰長度兩個方面。

作者與合作方商定加密算法時,對方技術水準較高,要求使用PKCS7Padding填充方式,着實讓人犯難,好在發現了Bouncy Castle,才解決了這一技術難題。

final Stirng CIPHER_ALGORIGHM=”DESede/ECB/PKCS5Padding”;
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);

經過驗證,目前採用的AES算法能夠有效抵禦已知的針對DES算法的所有攻擊方法,如部分差分攻擊、相關密鑰攻擊等。至今還沒有AES破譯的官方報道。
AES算法因密鑰建立時間短、靈敏性好、內存要求低等優點,在各個領域得到廣泛的研究與應用。

IDEA算法使用長度爲128位的密鑰,數據塊大小爲64位。從理論上講,IDEA屬於’強加密算法’,至今還沒有出現對該算法的有效攻擊算法(以目前計算機水平,破譯一個IDEA密鑰至少需要10^13年)

爲防止傳遞的數據在網絡傳遞過程中被篡改,我們可以對數據進行消息摘要,並對該摘要進行驗證。

調用AESCoder類的decrypt()方法對請求內容解密,並將解密後的內容輸出到控制檯中。同時我們將從HTTP Header中獲得此次交互數據的摘要信息,並對此驗證。
代碼參見github:
https://github.com/DISSIDIA-986/EncDecAboutJava

發佈了58 篇原創文章 · 獲贊 4 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章