常用的加解密算法分三大类:非对称密钥加密算法、对称密钥加密算法、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亿年 | 中 |
三、Hash加密算法(MD5、SHA等):
散列是信息的提炼,通常其长度要比信息小得多,且为一个固定长度。加密性强的散列一定是不可逆的,这就意味着通过散列结果,无法推出任何部分的原始信息。
任何输入信息的变化,哪怕仅一位,都将导致散列结果的明显变化,这称之为雪崩效应。散列还应该是防冲突的,即找不出具有相同散列结果的两条信息。
具有这些特性的散列结果就可以用于验证信息是否被修改。