C# MD5 哈希与 Java / PHP MD5 哈希不匹配

本文关键字:MD5 哈希 PHP 不匹配 Java | 更新日期: 2023-09-27 17:57:17

我的练习是将administration-backend从php移植到.net。

后端与用 java 编写的应用程序进行通信。

有些东西与md5哈希相比,在php和java中,md5哈希是平等的。

我无法更改 java 应用程序中的 md5 哈希代码,因为这样超过 10k 的客户卡将无法正常工作。

我的问题是,后端被移植,现在是新后端(.net)和java应用程序之间的通信。

我的 .net md5 哈希代码返回的哈希与 java 代码不同。

.java:

    public static String getMD5(String input) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] messageDigest = md.digest(input.getBytes());
            BigInteger number = new BigInteger(1, messageDigest);
            String hashtext = number.toString(16);

            // Now we need to zero pad it if you actually want the full 32 chars.
            while (hashtext.length() < 32)
                hashtext = "0" + hashtext;
            return hashtext;
        }
        catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
    }

和我的.net代码:

        public String hashMD5(String wert)
    {

        byte[] asciiBytes = ASCIIEncoding.UTF8.GetBytes(wert);
        byte[] hashedBytes = MD5CryptoServiceProvider.Create().ComputeHash(asciiBytes);
        string hashedString = BitConverter.ToString(hashedBytes).Replace("-", "").ToLower();
        return hashedString;
    }

我的 Java 代码返回 bb27aee4

46d5acfcd281bca9f1df7c9e38d50576

我的 .net 代码返回:

b767fe33172ec6cbea569810ee6cfc05

我不知道我该做什么...

请提前提供帮助和感谢。

C# MD5 哈希与 Java / PHP MD5 哈希不匹配

这不是

MD5哈希生成器的问题

MD5 哈希 for bb27aee446d5acfcd281bca9f1df7c9e38d50576 &
BB27AEE4的 MD5 哈希:b767fe33172ec6cbea569810ee6cfc05

所以基本上在.NET中,你正在为BB27AEE4生成MD5哈希,而不是bb27aee4

因此,请检查代码中的错误

祝你好运

您看到与哈希不同的结果的原因是用于字符串的编码不同。在 .NET 代码中,您可以显式指定UTF8,但不能保证 Java 代码也这样做;它很可能使用 ASCII,这会导致生成不同的哈希。

如果在 .NET 和 Java 代码中显式指定相同的编码,则最终也会得到相同的 MD5 哈希。