最近在看 Golang 的標準庫,看到 crypto
中的 aes
、des
、 ars
、sha
等等,頓時覺得熟悉又陌生,平時開發時遇到需要加密解密的時候總是看看文檔 copy 過來,不求甚解,是時候把他們排排隊,分分類了。
對稱加密
同一個密鑰
常見算法:DES、3DES、DESX、RC4、RC5、RC6和AES
DES (Data Encryption Standard) 類:最早的一批加密算法,主要用于金融和嵌入式設備,但由于用密鑰(56位)過短,所以安全性受到質疑。
注:其實,編程的世界里非常注重命名,尤其是協議和規范,所以我們不能只看縮寫,還是得了解一下縮寫代表的是哪幾個單詞。
AES (Advanced Encryption Standard) 從名字上可以看出是更為安全的加密方式。
RC (Rivest Cipher) 類:Ron Rivest 是美國密碼學家,此類是流加密算法,密鑰長度可變。
非對稱加密
雙方用不同的秘鑰,兩個秘鑰有一定的數學關系
常見算法:RSA、DSA、ECC
RSA:由于其 非常重要,所以以三位發明者的名字首字母命名。
DSA (Digital Signature Algorithm): 簽名算法。
ECC (Elliptic Curve Digital Signature Algorithm): 移動設備常用算法。
散列加密
生成固定長度摘要,不可逆
常見算法:MD2、MD4、MD5、SHA、SHA1、SHA2、SHA256、SHA512、HMAC、HMAC-SHA1
MD (Message-Digest): 消息摘要類,散列算法,加密后是定長字符串,一般用于數據一致性檢查,MD后面跟的數字代表版本升級。
SHA (Secure Hash Algorithm): 安全散列算法類,由 MD 類加密算法演進。
注意:MD5 和 SHA 都已被破解,當然破解不代表沒啥用而是存在被破解的可能性。
HMAC (Keyed-hash message authentication code): 消息散列認證碼,需要一個秘鑰,數據加密的同時可以驗證身份。
而 HMAC-SHA1 HMAC-SHA256 這些無非是將用于 HAMC 的秘鑰先進行 SHA 加密再使用。