Commons Codec の md5
単に文字列のMD5値を取りたいだけなのですが、どうも他の言語(Perl、Ruby、PHPなど)で作成したHASH値と異なるので不思議に思っていたら、Commons Codec の org.apache.commons.codec.digest.DigestUtils#md5(String) は文字列を UTF-8 としてバイト配列を作成して処理しているからずれてた。
UTF-8 以外の文字列のHASH値を取りたい場合は自分でバイト配列を取得してから、org.apache.commons.codec.digest.DigestUtils#md5(byte) で取得するのが正しそう。
例えば、文字列のエンコードが Windows-31J の場合は以下のような感じで。
String s = "ダイジェスト";
String hash = DigestUtils.md5Hex(s.getBytes("Windows-31J"));