各種加密算法簡介及其Java實現
1. 加密算法的介紹
根據密鑰類型不同將現代密碼技術分為兩類:對稱加密算法(秘密鑰匙加密)和非對稱加密算法(公開密鑰加密)。對稱鑰匙加密系統是加密和解密均采用同一把秘密鑰匙,而且通信雙方都必須獲得這把鑰匙,并保持鑰匙的秘密。非對稱密鑰加密系統采用的加密鑰匙(公鑰)和解密鑰匙(私鑰)是不同的。
對稱加密技術,常見的有:
DES(Data Encryption Standard):數據加密標準,速度較快,適用于加密大量數據的場合。
3DES(Triple DES):是基于DES,對一塊數據用三個不同的密鑰進行三次加密,強度更高。
AES(Advanced Encryption Standard):高級加密標準,是下一代的加密算法標準,速度快,安全級別高;
常見的非對稱加密算法如下:
RSA:由 RSA 公司發明,是一個支持變長密鑰的公共密鑰算法,需要加密的文件塊的長度也是可變的;
DSA(Digital Signature Algorithm):數字簽名算法,是一種標準的 DSS(數字簽名標準);
ECC(Elliptic Curves Cryptography):橢圓曲線密碼編碼學。- 在管理方面:公鑰密碼算法只需要較少的資源就可以實現目的,在密鑰的分配上,兩者之間相差一個指數級別(一個是n一個是n2)。所以私鑰密碼算法不適應廣域網的使用,而且更重要的一點是它不支持數字簽名。
- 在安全方面:由于公鑰密碼算法基于未解決的數學難題,在破解上幾乎不可能。對于私鑰密碼算法,到了AES雖說從理論來說是不可能破解的,但從計算機的發展角度來看。公鑰更具有優越性。
- 從速度上來看:AES的軟件實現速度已經達到了每秒數兆或數十兆比特。是公鑰的100倍,如果用硬件來實現的話這個比值將擴大到1000倍。 </ul>
2. 加密算法的選擇:
我們應該根據自己的使用特點來確定,由于非對稱加密算法的運行速度比對稱加密算法的速度慢很多,當我們需要加密大量的數據時,建議采用對稱加密算法,提高加解密速度。
對稱加密算法不能實現簽名,因此簽名只能非對稱算法。
由于對稱加密算法的密鑰管理是一個復雜的過程,密鑰的管理直接決定著他的安全性,因此當數據量很小時,我們可以考慮采用非對稱加密算法。
在實際的操作過程中,我們通常采用的方式是:采用非對稱加密算法管理對稱算法的密鑰,然后用對稱加密算法加密數據,這樣我們就集成了兩類加密算法的優點,既實現了加密速度快的優點,又實現了安全方便管理密鑰的優點。
如果在選定了加密算法后,那采用多少位的密鑰呢?一般來說,密鑰越長,運行的速度就越慢,應該根據的我們實際需要的安全級別來選擇,一般來說,RSA建議采用1024位的數字,ECC建議采用160位,AES采用128為即可。
3. 加密算法的未來:
隨著計算方法的改進,計算機運行速度的加快,網絡的發展,越來越多的算法被破解。
在2004年國際密碼學會議(Crypto’2004)上,來自中國山東大學的王小云教授做的破譯MD5、HAVAL-128、MD4和RIPEMD算法的報告,令在場的國際頂尖密碼學專家都為之震驚,意味著這些算法將從應用中淘汰。隨后,SHA-1也被宣告被破解。
歷史上有三次對DES有影響的攻擊實驗。1997年,利用當時各國 7萬臺計算機,歷時96天破解了DES的密鑰。1998年,電子邊境基金會(EFF)用25萬美元制造的專用計算機,用56小時破解了DES的密鑰。 1999年,EFF用22小時15分完成了破解工作。因此。曾經有過卓越貢獻的DES也不能滿足我們日益增長的需求了。
最近,一組研究人員成功的把一個512位的整數分解因子,宣告了RSA的破解。
我們說數據的安全是相對的,可以說在一定時期一定條件下是安全的,隨著硬件和網絡的發展,或者是另一個王小云的出現,目前的常用加密算法都有可能在短時間內被破解,那時我們不得不使用更長的密鑰或更加先進的算法,才能保證數據的安全,因此加密算法依然需要不斷發展和完善,提供更高的加密安全強度和運算速度。
縱觀這兩種算法一個從DES到3DES再到AES,一個從RSA到ECC。其發展角度無不是從密鑰的簡單性,成本的低廉性,管理的簡易性,算法的復雜性,保密的安全性以及計算的快速性這幾個方面去考慮。因此,未來算法的發展也必定是從這幾個角度出發的,而且在實際操作中往往把這兩種算法結合起來,也需將來一種集兩種算法優點于一身的新型算法將會出現,到那個時候,電子商務的實現必將更加的快捷和安全。
現在不同的開發語言都多多少少支持各種加密算法,并且都在不斷更新。在此提供一個簡單的用DES算法加密的例子,該例子用JAVA編寫。
更多的例子請參考:http://download.csdn.net/detail/lrenjundk/4192983,包括經典對稱密鑰加密算法,非對稱密鑰加密算法,數字簽名的實現,以及測試運行時間的小程序,程序代碼中有詳細的注釋