1) MD5/SHA
MessageDigest是一个数据的数字指纹.即对一个任意长度的数据进行计算,产生一个唯一指纹号.
MessageDigest的特性:
A) 两个不同的数据,难以生成相同的指纹号
B) 对于指定的指纹号,难以逆向计算出原始数据
代表:MD5/SHA
2) DES
单密钥算法,是信息的发送方采用密钥A进行数据加密,信息的接收方采用同一个密钥A进行数据解密.
单密钥算法是一个对称算法.
缺点:由于采用同一个密钥进行加密解密,在多用户的情况下,密钥保管的安全性是一个问题.
代表:DES
3) RSA
RSA 是一种非对称加解密算法。
RSA is named from the initials of the authors, Ron Rivest, Adi Shamir, and
Leonard Adleman,who first published the algorithm.
RSA 与 DSA 都是非对称加密算法。其中RSA的安全性是基于极其困难的大整数的分解(两个素数的乘积);DSA 的安全性
是基于整数有限域离散对数难题。基本上可以认为相同密钥长度的 RSA 算法与 DSA 算法安全性相当。
公钥用于加密,它是向所有人公开的;私钥用于解密,只有密文的接收者持有。
适用OPENSSL 适用RSA 的命令如下:
生成一个密钥(私钥)
[[email protected] ~]# openssl genrsa -out private.key 1024
注意: 需要注意的是这个文件包含了公钥和密钥两部分,也就是说这个文件即可用来加密也可以用来解密,后面的1024是生成
密钥的长度.
通过密钥文件private.key 提取公钥
[[email protected] ~]# openssl rsa -in private.key -pubout -out pub.key
使用公钥加密信息
[[email protected] ~]# echo -n "123456" | openssl rsautl -encrypt -inkey pub.key -pubin> encode.result
使用私钥解密信息
[[email protected] ~]#cat encode.result | openssl rsautl -decrypt -inkey private.key
123456
4) DSA (Digital Signature Algorithm)
DSA 一般用于数字签名和认证。
DSA是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。
DSA是基于整数有限域离散对数难题的,其安全性与RSA相比差不多。
在DSA数字签名和认证中,发送者使用自己的私钥对文件或消息进行签名,接受者收到消息后使用发送者的公钥
来验证签名的真实性。DSA只是一种算法,和RSA不同之处在于它不能用作加密和解密,也不能进行密钥交换,
只用于签名,它比RSA要快很多.
生成一个密钥(私钥)
[[email protected] ~]# openssl dsaparam -out dsaparam.pem 1024
[[email protected] ~]# openssl gendsa -out privkey.pem dsaparam.pem
生成公钥
[[email protected] ~]# openssl dsa -in privkey.pem -out pubkey.pem -pubout
[[email protected] ~]# rm -fr dsaparam.pem
使用私钥签名
[[email protected] ~]# echo -n "123456" | openssl dgst -dss1 -sign privkey.pem > sign.result
使用公钥验证
[[email protected] ~]# echo -n "123456" | openssl dgst -dss1 -verify pubkey.pem -signature sign.result
5) 其他选择: ECC
RSA 与 DSA 各有优缺点,那有没一个更好的选择呢?答案是肯定的,ECC(Elliptic Curves Cryptography):椭
圆曲线算法。
ECC 与 RSA 相比,有以下的优点:
(1)相同密钥长度下,安全性能更高,如160位ECC已经与1024位RSA、DSA有相同的安全强度。
(2)计算量小,处理速度快,在私钥的处理速度上(解密和签名),ECC远 比RSA、DSA快得多。
(3)存储空间占用小 ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多, 所以占用的存储空间小得多。
(4)带宽要求低使得ECC具有广泛得应用前景。
这使得ECC 取代RSA成为可能。