我在 Java 中编写了以下函数来计算 Md5 校验和。
class Utils {
public static String md5Hash(String input) {
String result = "";
try {
System.out.println("Input=" + input);
final MessageDigest md = MessageDigest.getInstance("MD5");
md.reset();
md.update(input.getBytes());
result = md.digest().toString();
} catch (Exception ee) {
System.err.println("Error computing MD5 Hash");
}
return result;
}
};
多次调用 Utils.md5Hash("abcde")
会得到不同的结果。我的理解是 md5 返回字符串的确定性和唯一校验和。那是错的吗?否则请让我知道我的实现中的错误。谢谢
最佳答案
字节数组的toString()
方法不返回有意义的字符串。它返回数组对象的类型,后跟数组的 hashCode。
如果要打印,请使用十六进制或 Base64 编码将字节数组转换为字符串。 Apache commons-codec 有方法可以做到这一点。
此外,请确保指定支持任何类型字符的 en 编码,以将字符串转换为字节数组。您使用的方法使用平台默认编码,例如,如果它是 latin-1 而您正在转换非 latin-1 字符,则该方法可能会失败。 UTF-8 是一个不错的选择。
关于JAVA Md5 返回非确定性结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12457359/