HMAC 的用途
HMAC 演算法主要應用於身分識別驗證,用法如下: 1.用戶端發出登入請求 2.伺服器返回一個隨機值,在會話記錄中儲存這個隨機值 3.用戶端將該隨機值作為密鑰,使用者密碼進行 hmac 運算,遞交給伺服器 4.伺服器讀取資料庫中的使用者密碼,利用密鑰做和用戶端一樣的 hmac運算,然後與使用者發送的結果比較,如果一致,則使用者身份合法。
這麼做有什麼好處呢。 如果我們在登入的過程中,駭客截獲了我們發送的資料,他也只能得到 hmac 加密過後的結果,由於不知道密鑰,根本不可能擷取到使用者密碼,從而保證了安全性。 HMAC 的種類
演算法種類 摘要長度HmacMD5 128HmacSHA1 160HmacSHA256 256HmacSHA384 384HmacSHA512 512
HMAC 的使用
1 . 剛才也看到了,想要使用 HMAC 演算法,那麼我們需要產生一個密鑰,這個密鑰怎麼產生呢。自己隨便瞎填嗎。 JDK 中內建了一個金鑰產生器 KeyGenerator 用於協助我們產生密鑰,樣本如下
public static byte[] getSecretKey() throws Exception { KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5"); // 可填入 HmacSHA1,HmacSHA256 等 SecretKey key = keyGenerator.generateKey(); byte[] keyBytes = key.getEncoded(); return keyBytes;}
2 . 既然已經得到了密鑰,那麼下面就開始執行訊息摘要演算法,在這之前,由於我們產生的密鑰是以 byte 數組返回的,所以我們需要將其還原成 SecretKey,具體過程如下
public static String encryptHmac(byte[] key, byte[] data) throws Exception { SecretKey secretKey = new SecretKeySpec(key, "HmacMD5"); Mac mac = Mac.getInstance("HmacMD5"); mac.init(secretKey); byte[] resultBytes = mac.doFinal(data); String resultString = byteToHexString(resultBytes); return resultString;}
如果想使用其他的演算法,可以將填入 HmacMD5 的所有欄位改為你想使用的演算法即可,比如 HmacSHA1, HmacSHA256 等。
下面對 helloworld 執行演算法查看結果
1efd5e8d4d0c20f68bdc732fd7a79677