如何在java中使用MessageDigest class?
How to use the MessageDigest class in java?
在检查了这个问题 (How can I generate an MD5 hash?) 并阅读了 MessageDigest 文档之后,我尝试散列一个简单的字符串。但是由于某种原因,我传递给方法 returns 的每个字符串都具有相同的值。下面是我写的代码。
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 实用程序 class 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();
}
或者这个:
在检查了这个问题 (How can I generate an MD5 hash?) 并阅读了 MessageDigest 文档之后,我尝试散列一个简单的字符串。但是由于某种原因,我传递给方法 returns 的每个字符串都具有相同的值。下面是我写的代码。
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 实用程序 class 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();
}
或者这个: