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;
?>

関連項目



スポンサーリンク