gpt4 book ai didi

java - 如何在java中使用MessageDigest类?

转载 作者:太空宇宙 更新时间:2023-11-04 10:40:05 28 4
gpt4 key购买 nike

检查此问题( How can I generate an MD5 hash? )并阅读 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

关于java - 如何在java中使用MessageDigest类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49089502/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com