Java计算MD5哈希值

发布于 2024-12-10 11:29:03 字数 1019 浏览 0 评论 0原文

http://www.anyexample.com/programming/java/java_simple_class_to_compute_md5_hash.xml 给出了如何计算 String 的 MD5 哈希值的示例。这会产生 20 位十六进制字符串。根据 http://en.wikipedia.org/wiki/MD5 我期望一个 32 位数字十六进制字符串。例如,我在 如何生成 MD5 哈希?

为什么我得到的东西看起来像 MD5 哈希值,但实际上不是?我无法想象我得到的所有字符串都必须用 12 个前导零填充。

编辑:一个代码示例

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< /a>

In http://www.anyexample.com/programming/java/java_simple_class_to_compute_md5_hash.xml an example is given how to calculate an MD5 hash of String. This results in a 20 digit hex string. According to http://en.wikipedia.org/wiki/MD5 I would expect a 32 digit hex string. I get the same result for example using dac2009 response in How can I generate an MD5 hash?.

Why do I get something which looks like a MD5 hash but isn't? I cannot imagine that all the strings I get I have to pad with 12 leading zeros.

Edit: one code example

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);
}

Taken from http://snippets.dzone.com/posts/show/3686

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

野却迷人 2024-12-17 11:29:03

使用 org.apache.commons.codec.digest.DigestUtils 代替:

DigestUtils.md5Hex(str);

这将为您提供 32 个字符的字符串结果

use org.apache.commons.codec.digest.DigestUtils instead:

DigestUtils.md5Hex(str);

this will give you 32 char string as a result

聚集的泪 2024-12-17 11:29:03

你一定是错过了什么。链接的代码很好。确保问题不在其他地方,与显示结果有关。可能性:

  • 在一个太小的 GUI 中
  • ,在一个控制台中,
  • 在网络包上存在多线程问题,该包很快就会被切断,
  • 您将长度缩短为 20 而不是 0x20,这是32

You must be missing something. The linked code is just fine. Make sure the issue is nowhere else, related to displaying the result. Possibilities:

  • in a GUI too small
  • in a console with multithreading issues
  • over a network package which is being cut off to soon
  • you cut the length to 20 instead of 0x20, which is 32.
少跟Wǒ拽 2024-12-17 11:29:03

您可以使用 DatatypeConverter.printHexBinary(digiest) 来获取由 32 个十六进制数字表示的 128 位哈希值。下面是生成 MD5 哈希 在Java中,

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);
}
}

You can use DatatypeConverter.printHexBinary(digiest) to get the 128 bit hash represented by 32 hexadecimal numbers. Below is the complete code snippet to generate MD5 hash in Java,

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);
}
}
海之角 2024-12-17 11:29:03

我尝试了上面的示例,MungPass("java"),我得到了一个 32 位字符串,
93f725a07423fe1c889f448b33d21f46。既然你在跑步时得到了前 20 个正确的结果,我猜你只是在打印输出中遗漏了一些东西?

I tried your example above, MungPass("java") and I got a 32 digit string,
93f725a07423fe1c889f448b33d21f46. Since you got the 20 first of those correct when you ran, I'm guessing you are simply missing something in the printout?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文