解密算法是加密算法的逆運算,加密密鑰和解密密鑰相同。如果我們把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