From : http://blog.sina.com.cn/s/blog_a9303fd90101cgw4.html
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 的命令如下:
生成一個金鑰(私鑰)
[root@hunterfu ~]# openssl genrsa -out private.key 1024
注意: 需要注意的是這個檔案包含了公鑰和金鑰兩部分,也就是說這個檔案即可用來加密也可以用來解密,後面的1024是生成
金鑰的長度.
通過金鑰檔案private.key 提取公鑰
[root@hunterfu ~]# openssl rsa -in private.key -pubout -out pub.key
使用公鑰加密資訊
[root@hunterfu ~]# echo -n "123456" | openssl rsautl -encrypt -inkey pub.key -pubin >encode.result
使用私鑰解密資訊
[root@hunterfu ~]#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要快很多.
生成一個金鑰(私鑰)
[root@hunterfu ~]# openssl dsaparam -out dsaparam.pem 1024
[root@hunterfu ~]# openssl gendsa -out privkey.pem dsaparam.pem
生成公鑰
[root@hunterfu ~]# openssl dsa -in privkey.pem -out pubkey.pem -pubout
[root@hunterfu ~]# rm -fr dsaparam.pem
使用私鑰簽名
[root@hunterfu ~]# echo -n "123456" | openssl dgst -dss1 -sign privkey.pem > sign.result
使用公鑰驗證
[root@hunterfu ~]# 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成為可能。