【Java】HMAC-SHA256で文字列を「ハッシュ化」と「メッセージ認証コード(MAC)」の生成をしてみるよ
JavaでHMAC-SHA256で文字列を暗号化し、その結果をString型で出力するには、以下の手順で行うことができます
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class HmacSHA256Example {
public static String hmacSha256(String secretKey, String message) {
try {
// HMAC-SHA256アルゴリズムを指定
Mac sha256Hmac = Mac.getInstance("HmacSHA256");
// 秘密鍵を指定
SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
sha256Hmac.init(secretKeySpec);
// メッセージをHMAC-SHA256でハッシュ化
byte[] hash = sha256Hmac.doFinal(message.getBytes(StandardCharsets.UTF_8));
// Base64でエンコードして文字列に変換
return Base64.getEncoder().encodeToString(hash);
} catch (Exception e) {
throw new RuntimeException("Error while generating HMAC-SHA256", e);
}
}
public static void main(String[] args) {
String secretKey = "your-secret-key";
String message = "your-message";
String hmacSha256 = hmacSha256(secretKey, message);
System.out.println("HMAC-SHA256: " + hmacSha256);
}
}
- Mac.getInstance(“HmacSHA256”) でHMAC-SHA256アルゴリズムを取得します
- SecretKeySpec で秘密鍵を指定し、それをHMAC-SHA256で使うように設定します
- sha256Hmac.doFinal(message.getBytes(StandardCharsets.UTF_8)) でメッセージをハッシュ化します
- Base64.getEncoder().encodeToString(hash) で結果のバイト配列をBase64形式にエンコードして、文字列として出力します
上記によって、指定された秘密鍵とメッセージを使ってHMAC-SHA256で暗号化した文字列が得られます
HMAC-SHA256は暗号化ではなく「ハッシュ化」と「メッセージ認証コード(MAC)」の生成に使用されます
具体的には以下のように動作します
- 秘密鍵とメッセージを入力として、HMAC-SHA256アルゴリズムが固定長のハッシュ値を生成します
- HMACはデータの整合性や改ざん検出に使用され、メッセージ認証コードを生成するための技術です
- 秘密鍵:データを保護するために使用する共通の鍵です。これを知っている人だけが、同じHMACを生成できます。
- メッセージ:ハッシュ化されるデータです。このメッセージが変わると、生成されるHMACも変わります。
具体的にはこんな時に使います
- HMAC-SHA256はデータが改ざんされていないことを確認するために使われます
受け取った側は同じ秘密鍵を使ってHMACを再計算し、送られてきたHMACと一致するかを確認します - これはメッセージそのものを隠す「暗号化」ではなく、メッセージの整合性を確認する「署名」や「ハッシュ化」といったものです
是非フォローしてください
最新の情報をお伝えします