前言
我們在做java
項目開發的時候,在前后端接口分離模式下,接口信息需要加密處理,做簽名認證,還有在用戶登錄信息密碼等也都需要數據加密。信息加密
是現在幾乎所有項目都需要用到的技術,身份認證、單點登陸、信息通訊、支付交易等場景中經常會需要用到加密算法,所謂加密算法,就是將原本的明文通過一系列算法操作變成密文。
-
BASE
嚴格地說,屬於編碼格式,而非加密算法
MD
(Message Digest algorithm ,信息摘要算法)
SHA
(Secure Hash Algorithm,安全散列算法)
HMAC
(Hash Message Authentication Code,散列消息鑒別碼) -
加密算法中
SHA1、SHA-224、SHA-256、SHA-384
,和SHA-512
,其中SHA-224、SHA-256、SHA-384
,和SHA-512
我們可以統稱為SHA2
加密算法 -
SHA
加密算法的安全性要比MD5
更高,而SHA2
加密算法比SHA1
的要高。其中SHA
后面的數字表示的是加密后的字符串長度,SHA1
默認會產生一個160
位的信息摘要。
MD5
MD5信息摘要算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數,可以產生出一個128位(16字節)的散列值(hash value),用於確保信息傳輸完整一致。
MD5算法有以下特點:
-
壓縮性:無論數據長度是多少,計算出來的MD5值長度相同
-
容易計算性:由原數據容易計算出MD5值
-
抗修改性:即便修改一個字節,計算出來的MD5值也會巨大差異
-
抗碰撞性:知道數據和MD5值,很小概率找到相同MD5值相同的原數據
准確來講,MD5不是一種加密算法,而是一種摘要算法,MD5能將明文輸出為128bits的字符串,這個字符串是無法再被轉換成明文的。網上一些MD5解密網站也只是保存了一些字符串對應的md5串,通過已經記錄的md5串來找出原文。
我做過的幾個項目中經常見到MD5用在加密上的場景。比如對密碼的加密,生成一個密碼后,使用MD5生成一個128位字符串保存在數據庫中,用戶輸入密碼后也先生成MD5串,再去數據庫里比較。因此我們在找回密碼時是無法得到原來的密碼的,因為明文密碼根本不會被保存。
SHA系列
- 安全散列算法(英語:Secure Hash Algorithm,縮寫為SHA)是一個密碼散列函數家族,是FIPS所認證的安全散列算法。能計算出一個數字消息所對應到的,長度固定的字符串(又稱消息摘要)的算法。且若輸入的消息不同,它們對應到不同字符串的機率很高。
- 2005年8月17日的CRYPTO會議尾聲中王小雲、姚期智、姚儲楓再度發表更有效率的SHA-1攻擊法,能在2的63次方個計算復雜度內找到碰撞。
也就是說SHA-1
加密算法有碰撞的可能性,雖然很小。
HMAC
- HMAC是密鑰相關的哈希運算消息認證碼(Hash-based Message Authentication Code)的縮寫,由H.Krawezyk,M.Bellare,R.Canetti於1996年提出的一種基於Hash函數和密鑰進行消息認證的方法,並於1997年作為RFC2104被公布,並在IPSec和其他網絡協議(如
SSL
)中得以廣泛應用,現在已經成為事實上的Internet安全標准。它可以與任何迭代散列函數捆綁使用。- HMAC算法更像是一種
加密算法
,它引入了密鑰
,其安全性已經不完全依賴於所使用的Hash算法
如果要使用加密
,推薦使用SHA256、SHA384、SHA512以及HMAC-SHA256、HMAC-SHA384、HMAC-SHA512這幾種算法。
對稱加密算法
-
對稱加密算法是應用比較早的算法,在數據加密和解密的時用的都是同一個密鑰,這就造成了密鑰管理困難的問題。常見的對稱加密算法有
DES、3DES、AES128、AES192、AES256
(默認安裝的 JDK 尚不支持 AES256,需要安裝對應的 jce 補丁進行升級 jce1.7,jce1.8)。其中AES后面的數字代表的是密鑰長度。對稱加密算法的安全性相對較低,比較適用的場景就是內網環境中的加解密。 -
所謂對稱加密,就是通過密鑰加密后可以再通過
密鑰解密
。我接觸過的某個國企現在內部就是采用AES
的方式實現集成登陸。第三方系統提供一個接收用戶信息的接口,該國企將用戶信息AES加密后通過這個接口傳遞給第三方系統,第三方系統自行實現登陸操作。這里需要注意的是密鑰十分重要,如果密鑰丟失
,就有信息泄漏
的風險。
加密鹽
-
加密鹽也是比較常聽到的一個概念,鹽就是一個隨機字符串用來和我們的加密串拼接后進行加密。
-
加鹽主要是為了提供加密字符串的安全性。假如有一個加鹽后的加密串,黑客通過一定手段這個加密串,他拿到的明文,並不是我們加密前的字符串,而是加密前的字符串和鹽組合的字符串,這樣相對來說又增加了字符串的安全性。
在線加密網站
總結
比較推薦的幾個加密算法有:
-
不可逆加密:SHA256、SHA384、SHA512以及HMAC-SHA256、HMAC-SHA384、HMAC-SHA512
-
對稱加密算法:AES、3DES
-
非對稱加密算法:RSA