天天看點

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