JAVA Md5 返回非确定性结果

标签 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;
    }
};

多次调用 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/

相关文章:

java - 函数返回树的叶子

security - 如何使用Spring 3.x开发https站点?

security - 不需要 UserProvider 的自定义身份验证

security - Phoenix/Elixir 中 api key 的散列并为此使用 comeonin

c++ - std::hash 是否保证 "equal" float 的哈希值相等?

java - 如果一个算法调用另一个算法来执行其功能,它的总体时间复杂度是否会受到影响?

java - 扩展泛型类但削弱子类中的泛型绑定(bind)

java - 将 base64 字符串图像显示为超链接

R:将字符串快速散列为整数模 n?

android - 无效的 key 散列。 key 哈希与任何存储的 key 哈希都不匹配