如何在Java中使用MessageDigest类?

aspire29

在检查了这个问题(如何生成MD5哈希?)并阅读MessageDigest文档之后,我尝试对一个简单的字符串进行哈希处理。但是由于某种原因,我传入该方法的每个字符串都返回相同的值。下面显示了我编写的代码。

    byte[] bytesOfMessage = "helloworld".getBytes("UTF-8");
    MessageDigest md = MessageDigest.getInstance("MD5");
    byte[] thedigest = md.digest(bytesOfMessage);
    System.out.println(thedigest);

而且是否有限制我从哈希中获得的字符数的限制?

节食者

System.out.println(thedigest);调用toString()数组方法。

Java数组类型并不能覆盖的默认实现Object#toString()

// from Object.java
public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

这就是为什么您看到字符串 [B@5b1d2887

如果要打印数组,请使用java实用工具类java.util.Arrays

System.out.println(Arrays.toString(myArray));

但是,在这种情况下,您应该从MD5摘要字节数组中创建一个人类可读的字符串。为此使用以下简单方法:

public static String digestToReadableString(byte[] digest){
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < digest.length; i++) {
        String s = Integer.toHexString(digest[i]);
        while (s.length() < 2) {
            s = "0" + s;
        }
        s = s.substring(s.length() - 2); // we need the last 2 chars
        sb.append(s);
    }
    return sb.toString();
}

或这个:https : //stackoverflow.com/a/304275/1614378

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章