14

http://www.anyexample.com/programming/java/java_simple_class_to_compute_md5_hash.xmlには、文字列の 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);
}

http://snippets.dzone.com/posts/show/3686から取得

4

4 に答える 4

47

org.apache.commons.codec.digest.DigestUtils代わりに使用してください:

DigestUtils.md5Hex(str);

これにより、結果として32文字の文字列が得られます

于 2011-10-15T06:32:43.653 に答える
4

あなたは何かが欠けているに違いありません。リンクされたコードは問題ありません。結果の表示に関連して、問題が他にないことを確認してください。可能性:

  • 小さすぎるGUIで
  • マルチスレッドの問題があるコンソールで
  • まもなく切断されるネットワーク パッケージ経由
  • 20長さをではなく にカットします。0x20これは32です。
于 2011-10-15T08:16:20.343 に答える
1

上記の例、MungPass("java") を試してみたところ、32 桁の文字列 93f725a07423fe1c889f448b33d21f46 が得られました。実行したときに最初の 20 個が正解だったので、印刷物に何かが欠けているだけだと思いますか?

于 2013-01-22T17:04:09.240 に答える