javax.crypto.Mac
程式範例。
javax.crypto.Mac
類別提供訊息認證碼(Message Authentication Code, MAC)的演算法功能。
MAC提供以密鑰(key)來檢查資料完整性的方法。訊息認證碼(MAC)多用在驗證兩團體(例如系統A與系統B)間的傳輸資料,透過兩團體共享的一把密鑰來檢查。
基於密鑰雜湊演算法的MAC又稱為HMAC。HMAC可以與各種的雜湊算法,例如SHA256或SHA384,與密鑰搭配使用。
HMAC的規格請見RFC 2104。
每個Java平台的實作需要支援以下標準MAC演算法。
- HmacMD5
- HmacSHA1
- HmacSHA256
這些演算法標準名稱請見Java Cryptography Architecture Standard Algorithm Name Documentation的Mac章節。
下面範例使用HmacSHA256 HMAC及密鑰對訊息進行雜湊計算。
String key = "mykey"; // 雜湊用的密鑰字串,又稱為鹽(salt)
String message = "hello world";
try {
byte[] keyBytes = key.getBytes(StandardCharsets.UTF_8.name()); // 把密鑰字串轉為byte[]
Key hmacKey = new SecretKeySpec(keyBytes, "HmacSHA256"); // 建立HMAC加密用密鑰
Mac hmacSHA256 = Mac.getInstance("HmacSHA256"); // 取得SHA256 HMAC的Mac實例
hmacSHA256.init(hmacKey); // 使用密鑰對Mac進行初始化
byte [] macData = hmacSHA256.doFinal(message.getBytes(StandardCharsets.UTF_8.name())); // 對原始訊息進行雜湊計算
String hexStringOfTheOriginMessage = Hex.encodeHexString(macData); // 使用Apache Commons Codec的Hex把雜湊計算的結果轉為Hex字串
System.out.println(hexStringOfTheOriginMessage); // 388b02bb9be6c19490d4014aaaccb62a3969f44f3ecef3b2218e7ee1d457188d
System.out.println(hmacSHA256.getAlgorithm()); // HmacSHA256
System.out.println(hmacSHA256.getMacLength()); // 32
System.out.println(hmacSHA256.getProvider().getName()); // SunJCE (JCE提供者)
} catch (UnsupportedEncodingException |
NoSuchAlgorithmException |
InvalidKeyException e) {
// 例外處理
}
上面範例原本的訊息hello world
經密鑰mykey
雜湊的結果為388b02bb9be6c19490d4014aaaccb62a3969f44f3ecef3b2218e7ee1d457188d
。
如果覺得文章有幫助的話還幫忙點個Google廣告,感恩。
沒有留言:
張貼留言