Javaで認証コード生成(HMAC-SHA1)
【追記】暗号化→認証コード生成に修正 2009/08/29
ハッシュ関数を用いて「秘密鍵」と「認証すべき任意長のメッセージ」から暗号認証コード(MAC値)を生成する。HMACの詳細はHMAC(by Wiki)で。
まずはこの記事から引用(一部改変)
import javax.crypto.*; import org.apache.commons.codec.binary.Hex; public class hmacsha1 { public static void main(String[] args) throws Exception { KeyGenerator kg = KeyGenerator.getInstance("HmacSHA1"); SecretKey sk = kg.generateKey(); // skが秘密鍵 Mac mac = Mac.getInstance("HmacSHA1"); mac.init(sk); byte[] result = mac.doFinal("hoge".getBytes()); // "hoge"が認証メッセージ System.out.println(new String(Hex.encodeHex(result))); } }
出力例は以下の通り。
06f3f3bf2acac18af258313041da55fbca82a82648686b78adac9839e
なお、上記サイトにもあるようにbyte配列をprintするのにtoString()ではうまくいかない。
そこで、Hex関数を使うとよさ気。指定された値を16進数文字列で返す関数。
jarファイル置き場はココです。commons-codec-1.3.zipがいいかも。
どうやら以下の部分にて秘密鍵は自動生成してくれてるらしい。
KeyGenerator kg = KeyGenerator.getInstance("HmacSHA1"); SecretKey sk = kg.generateKey(); // skが秘密鍵
自分で定めた秘密鍵を使いたい場合は、上の2行を以下に置き換える。
String kagi = "geho"; // "geho"が秘密鍵 SecretKeySpec sk = new SecretKeySpec(kagi.getBytes(), "HmacSHA1");
(import javax.crypto.spec.SecretKeySpec;が必要)
とりあえずJavaでの暗号化認証コード生成はこんな感じなのかな〜。