網頁

2019/12/12

Java javax.crypto.Mac HmacSHA256 雜湊計算範例

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廣告,感恩。


沒有留言:

張貼留言