繁体   English   中英

Java计算MD5哈希

[英]Java calculate MD5 hash

http://www.anyexample.com/programming/java/java_simple_class_to_compute_md5_hash.xml中 ,给出了如何计算String的MD5哈希的示例。 这导致20位十六进制字符串。 根据http://en.wikipedia.org/wiki/MD5,我希望有一个32位的十六进制字符串。 我得到了相同的结果,例如使用dac2009响应如何生成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

请改用org.apache.commons.codec.digest.DigestUtils

DigestUtils.md5Hex(str);

这将给你32个字符串作为结果

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

  • 在GUI太小
  • 在具有多线程问题的控制台中
  • 通过即将被切断的网络包
  • 你将长度减少到20而不是0x20 ,即32

我尝试了上面的例子,MungPass(“java”),我得到了一个32位的字符串,93f725a07423fe1c889f448b33d21f46。 因为当你跑步时你得到了第一个正确的20个,我猜你只是在打印输出中丢失了一些东西?

您可以使用DatatypeConverter.printHexBinary(digiest)来获取由32个十六进制数字表示的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);
}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM