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

时间:2014-04-07 07:54:44

标签: c# java .net hash md5

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

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

有些东西与md5-hashes相比,在php和java中md5哈希值相同。

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

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

我的.net md5-hash代码返回与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

我不知道自己要做什么......

请提前帮助和谢谢。

2 个答案:

答案 0 :(得分:5)

它不是MD5哈希生成器的问题

bb27aee4的MD5哈希:46d5acfcd281bca9f1df7c9e38d50576&amp;
BB27AEE4的MD5哈希:b767fe33172ec6cbea569810ee6cfc05

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

请检查代码中的错误

祝你好运

答案 1 :(得分:0)

您从哈希中看到不同结果的原因是因为用于字符串的编码不同。在您的.NET代码中,您明确指定UTF8,而没有保证您的Java代码也是如此;它可能很好地使用ASCII,这会导致生成不同的哈希值。

如果在.NET和Java代码中明确指定相同的编码,那么您最终也会得到相同的MD5哈希值。