JavaでHMAC-SHA256を計算する
提供: Java入門
スポンサーリンク
JavaでHMACを計算する場合は、 javax.crypto.Macクラスを使用します。HMAC-SHA1, HMAC-SHA256 , HMAC-MD5などを求めることができます。
読み方
- HMAC
- えいちまっく
概要
HMACとは、Hash-based Message Authentication Code の略です。メッセージ認証符号の1つです。HMACは、署名として利用されます。インターネットの世界でよく利用されている仕組みです。たとえば、暗号化通信(TLS/HTTPS)で利用されています。
ソースコード
"HmacSHA256"を"HmacSHA1"などに書換えることにより、他のアルゴリズムを選択できます。
- HmacSHA256
- HmacSHA1
- HmacMD5
- plaintext は、署名するデータです。
- secret は、共通鍵になります。
/* * HmacSha256.java * Copyright (C) 2015 kaoru <kaoru@localhost> */ import javax.crypto.Mac; import javax.crypto.KeyGenerator; import javax.crypto.spec.SecretKeySpec; import java.security.NoSuchAlgorithmException; import java.security.InvalidKeyException; public class HmacSha256 { public HmacSha256() { } public static void main(String[] args) { String algo = "HmacSHA256"; try { String plaintext = "hoge"; String secret = "This is your secret"; SecretKeySpec sk = new SecretKeySpec(secret.getBytes(), algo); Mac mac = Mac.getInstance(algo); mac.init(sk); byte[] mac_bytes = mac.doFinal(plaintext.getBytes()); StringBuilder sb = new StringBuilder(2 * mac_bytes.length); for(byte b: mac_bytes) { sb.append(String.format("%02x", b&0xff) ); } System.out.println( sb ); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } } }
コンパイル
$ javac HmacSha256.java
実行例
JavaとPHPの両方のコードで同じ値になることを確認しました。
$ java HmacSha256 4a7bc6c59ebc1a83dc38ec4fd537f98994a9210bf09ad9fc8c60c2ae83746d82 $ php hash_hmac.php 4a7bc6c59ebc1a83dc38ec4fd537f98994a9210bf09ad9fc8c60c2ae83746d82
比較用コード hash_hmac.php
HmacSha256.javaの比較用に同じコードをPHPで書きました。
<?php /** * Short description for hash_hmac.php * * @package hash_hmac * @author kaoru <kaoru@localhost> * @version 0.1 * @copyright (C) 2015 kaoru <kaoru@localhost> */ $algo = "sha256"; $plaintext = "hoge"; $secret = "This is your secret"; echo hash_hmac($algo, $plaintext, $secret), PHP_EOL; ?>
関連項目
ツイート
スポンサーリンク