常用的加解密算法分三大類:非對稱密鑰加密算法、對稱密鑰加密算法、Hash加密算法
一、非對稱密鑰加密算法(RSA、DSA、ECC、DH等):
非對稱加密又叫公開密鑰算法(public key algorithm)。這種加密算法是這樣設計的:用作加密的密鑰不同於用作解密的密鑰,而且解密密鑰不能根據加密密鑰計算出來(至少在合理假定的長時間內)。之所以又叫做公開密鑰算法是由於加密密鑰可以公開,即陌生人可以得到它並用來加密信息,但只有用相應的解密密鑰才能解密信息。在這種加密算法中,加密密鑰被叫做公開密鑰,而解密密鑰被叫做私有密鑰。非對稱加密算法的加密、解密的效率比較低。在算法設計上,非對稱加密算法對待加密的數據長度有着苛刻的要求。例如RSA算法要求待加密的數據不得大於53個字節。
表1 非對稱密鑰加密算法安全性對比:
攻破時間 (MIPS年) |
RSA/DSA (密鑰長度) |
ECC 密鑰長度 |
RSA/ECC 密鑰長度比 |
104 |
512 |
106 |
5:1 |
108 |
768 |
132 |
6:1 |
1011 |
1024 |
160 |
7:1 |
1020 |
2048 |
210 |
10:1 |
1078 |
21000 |
600 |
35:1 |
注:1MIPS年是1MIPS的機器一年所能處理的數據量,如上表中的10000MIPS年,即表示處理速度爲10000MIPS的CPU需要1年才能攻破。
表中紅色表示不安全、黃色表示中等安全、綠色表示安全級別較高。
由上表可知,ECC算法抗攻擊能力強、計算量小、處理速度快、存儲空間小、帶寬要求低。使得ECC在無線通信安全、IC卡數據加密等領域廣泛應用。這些特點必將使其替換RSA等算法,而成爲通用的公鑰加密算法。然而由於非對稱算法本身的複雜性,使得其對大數據加解密的適用性不強,所以非對稱算法常與對稱加密算法結合使用,即利用非對稱算法對對稱算法的密鑰進行加密傳輸。
Java代碼的DH算法,參考:http://blog.csdn.net/kongqz/article/details/6302913
二、對稱密鑰加密算法(DES、3DES、AES等)
對稱鑰匙加密系統是加密和解密均採用同一把祕密鑰匙,而且通信雙方都必須獲得這把鑰匙,並保持鑰匙的祕密。
表2 AES與3DES的比較
算法名稱 |
算法類型 |
密鑰長度 |
速度 |
解密時間(建設機器每秒嘗試255個密鑰) |
資源消耗 |
AES |
對稱block密碼 |
128、192、256位 |
高 |
1490000億年 |
低 |
3DES |
對稱feistel密碼 |
112位或168位 |
低 |
46億年 |
中 |
散列是信息的提煉,通常其長度要比信息小得多,且爲一個固定長度。加密性強的散列一定是不可逆的,這就意味着通過散列結果,無法推出任何部分的原始信息。任何輸入信息的變化,哪怕僅一位,都將導致散列結果的明顯變化,這稱之爲雪崩效應。散列還應該是防衝突的,即找不出具有相同散列結果的兩條信息。具有這些特性的散列結果就可以用於驗證信息是否被修改。