2009-07-30
Javaで認証コード生成(HMAC-SHA1)
Java | |
【追記】暗号化→認証コード生成に修正 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での暗号化認証コード生成はこんな感じなのかな〜。
トラックバック - http://d.hatena.ne.jp/billest/20090730/1248910076
リンク元
- 6 http://mixi.jp/view_diary.pl?id=1240331335&owner_id=1492843
- 6 http://twitter.com/billest001
- 3 http://search.yahoo.co.jp/search?p=hmac+java&search.x=1&fr=top_ga1_sa&tid=top_ga1_sa&ei=UTF-8&aq=&oq=
- 3 http://www.google.co.jp/search?hl=ja&q=Java+SHA1&sourceid=navclient-ff&rlz=1B5_____jaJP337JP337&ie=UTF-8
- 2 http://www.google.co.jp/search?hl=ja&q=java+認証&lr=lang_ja
- 2 http://www.google.co.jp/search?q=org.apache.commons.codec.binary.Hex&hl=ja&lr=lang_ja&rlz=1T4SNYL_jaJP268JP269&start=10&sa=N
- 2 http://www.shinobi.jp/etc/goto.html?http://d.hatena.ne.jp/billest/
- 1 http://74.125.153.132/search?q=cache:gIYndprkKk8J:bugzero.shooti.jp/s/496063/31+org.apache.commons.codec.binary.Hex+eclipse&cd=3&hl=ja&ct=clnk&gl=jp&lr=lang_ja
- 1 http://74.125.153.132/search?q=cache:yLyxGfrbU-MJ:www.hachikun.com/search/?q=java+HmacSHA1+java&cd=36&hl=ja&ct=clnk&gl=jp&lr=lang_ja&client=firefox-a
- 1 http://d.hatena.ne.jp/billest
暗号化を実装するなら、Diffie-Hellmanの鍵共有とか、対称・非対称暗号化方式のことで、JCEで簡単に実装できますよ〜
暗号化はJCEで出来るんですね、今度いじってみたいと思います!
参考になるコメント、ありがとうございました。