http://www.anyexample.com/programming/Java/java_simple_class_to_compute_md5_hash.xml では、StringのMD5ハッシュを計算する方法の例が示されています。これにより、20桁の16進数文字列になります。 http://en.wikipedia.org/wiki/MD5 によると、32桁の16進数文字列が必要です。 MD5ハッシュを生成するにはどうすればよいですか? で、たとえばdac2009応答を使用して同じ結果が得られます。
MD5ハッシュのように見えるのに、そうではないのはなぜですか?取得するすべての文字列に12個の先行ゼロを埋め込む必要があるとは思えません。
編集:1つのコード例
public static String MungPass(String pass) throws NoSuchAlgorithmException {
MessageDigest m = MessageDigest.getInstance("MD5");
byte[] data = pass.getBytes();
m.update(data,0,data.length);
BigInteger i = new BigInteger(1,m.digest());
return String.format("%1$032X", i);
}
あなたは何かを逃しているに違いありません。リンクされたコードは問題ありません。結果の表示に関連する問題が他にないことを確認してください。可能性:
20
ではなく0x20
にカットします。これは32
です。使用する org.Apache.commons.codec.digest.DigestUtils
代わりに:
DigestUtils.md5Hex(str);
これにより、結果として32文字の文字列が得られます
上記の例であるMungPass( "Java")を試したところ、32桁の文字列93f725a07423fe1c889f448b33d21f46が得られました。実行したときに最初の20が正しかったので、出力に何か欠けていると思いますか?
DatatypeConverter.printHexBinary(digiest)を使用して、32桁の16進数で表される128ビットのハッシュを取得できます。以下は、Javaで MD5ハッシュを生成 への完全なコードスニペットです。
import Java.security.MessageDigest;
import Java.security.NoSuchAlgorithmException;
import javax.xml.bind.DatatypeConverter;
public class MD5HashGenerator
{
public static void main(String args[]) throws NoSuchAlgorithmException
{
String stringToHash = "MyJavaCode";
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.update(stringToHash.getBytes());
byte[] digiest = messageDigest.digest();
String hashedOutput = DatatypeConverter.printHexBinary(digiest);
System.out.println(hashedOutput);
}
}