JavaでMessageDigestを生成する
MessageDigestは、ある入力に対して一方向のハッシュ値を計算するためのアルゴリズム(ハッシュ関数)のことです。
任意の文字列から固定長のハッシュ値を生成することが可能となります。
実際の利用シーンとしては、認証の際の電子署名や、ファイルの改ざんや破損チェックにチェックサムとして利用されたりしています。
Javaで利用可能なMessageDigestのアルゴリズムを調べるには、以下のようなコードで確認が可能となっている。
ソースコード
Set<String> algorithms = Security.getAlgorithms("MessageDigest"); for (String algorithm : algorithms) { System.out.println(algorithm); }
出力結果(JDK1.6)
SHA-256
SHA-512
SHA
SHA-384
MD5
MD2
この結果は、Oracleの公式ドキュメントとも一致している。
http://docs.oracle.com/javase/jp/6/technotes/guides/security/StandardNames.html
MessageDigestは、以下のようなコードでを生成することが可能です。
ソースコード
String string = "log4jk"; try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(string.getBytes()); byte[] digest = md.digest(); for (byte b : digest) { String hexString = Integer.toHexString(b & 0xff); if (hexString.length() == 1) { System.out.print("0"); continue; } System.out.print(hexString); } } catch (NoSuchAlgorithmException e) { e.printStackTrace(); }
出力結果
af7f3f14590c3989d8a5cfbeb6488b0