JAVA Md5返回非确定性结果

wor*_*ise 1 java security hash md5 md5sum

我编写了以下函数来计算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;
    }
};
Run Code Online (Sandbox Code Playgroud)

Utils.md5Hash("abcde") 多次调用会产生不同的结果.我的理解是md5为字符串返回一个确定性和唯一的校验和.那是错的吗?另外请告诉我实施中的错误.谢谢

JB *_*zet 7

toString()字节数组的方法不返回有意义的字符串.它返回数组对象的类型,后跟数组的hashCode.

如果要打印,请使用Hex或Base64编码将字节数组转换为String.Apache commons-codec有方法可以做到这一点.

此外,请确保指定en编码,该编码支持将字符串转换为字节数组的任何类型的字符.您正在使用的方法使用平台默认编码,例如,如果它是latin-1并且您正在转换非latin-1字符,则可能会失败.UTF-8是个不错的选择.