• ベストアンサー

MessageDigestについて

JavaではMessageDigestを利用して"MD5"や"SHA1"のような暗号化を行う事が出来ますが、これらで作成したハッシュ値はbyte[]型になっていて、表示するにはちょと問題があるかと思います。 そこでご質問ですが、MessageDigestで作成したハッシュ値を表示に適した文字に変えるようなAPIは存在するのでしょうか? よく"md5=990e8673jy8328968hu…"のような形になっているのですが、どのように文字列を作成しているのかが分かりません。 ご存知の方がおられましたら、ご回答お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

これは実際MD5うんぬんの話ではなくて、byte値を16進文字列にする話やね。それにはえっちらおっちら変換しないといけない。サンプルを用意したので参考にして欲しい。 import java.security.*; public class Md5 { public static void main(String[] args) { byte[] digest; try { digest = MessageDigest.getInstance("MD5").digest(args[0].getBytes()); } catch(NoSuchAlgorithmException e) { // MD5が無い時 System.out.println("MD5なんて無い"); return; } catch(Exception e) { // それ以外の例外 System.out.println("usage: java Md5 ハッシュする文字"); return; } StringBuffer sb = new StringBuffer(); for(int i = 0; i < digest.length; i++) { sb.append(Integer.toHexString((digest[i] >> 4) & 0x0f)); // 上位ニブルを1文字へ sb.append(Integer.toHexString( digest[i] & 0x0f)); // 下位ニブルを1文字へ } String s = new String(sb); System.out.println(s); } }

ryvius
質問者

お礼

なるほど、あの文字列はbyte値を16進文字列に変換したものなんですね。 サンプルまでお教え頂いてありがとうございます。 参考にしてプログラムを作ってみたいと思います。 ありがとうございました。

関連するQ&A