MD5 哈希在 C# 和 PHP 中不匹配

2022-08-30 16:09:21

我尝试过使用MD5在PHP中对字符串进行哈希处理,在C#中也是如此,但结果不同。有人可以解释一下如何让它匹配吗?

我的 C# 代码看起来像

md5 = new MD5CryptoServiceProvider();
            originalBytes = ASCIIEncoding.Default.GetBytes(AuthCode);
            encodedBytes = md5.ComputeHash(originalBytes);

            Guid r = new Guid(encodedBytes);
            string hashString = r.ToString("N");

提前致谢

已编辑:我的字符串是 123 作为字符串

产出;

PHP: 202cb962ac59075b964b07152d234b70

C# : 62b92c2059ac5b07964b07152d234b70


答案 1

您的问题就在这里:

Guid r = new Guid(encodedBytes);
string hashString = r.ToString("N");

我不确定为什么要将编码的字节加载到Guid中,但这不是将字节转换回字符串的正确方法。请改用:BitConverter

string testString = "123";
byte[] asciiBytes = ASCIIEncoding.ASCII.GetBytes(testString);
byte[] hashedBytes = MD5CryptoServiceProvider.Create().ComputeHash(asciiBytes);
string hashedString = BitConverter.ToString(hashedBytes).Replace("-", "").ToLower();
// hashString == 202cb962ac59075b964b07152d234b70

答案 2

Juliet的解决方案并没有给我与我正在比较的PHP哈希(由Magento 1.x生成)相同的结果,但是基于github上的这个实现,以下内容确实如此:

                using (var md5 = MD5.Create())
                {
                    result = BitConverter.ToString(md5.ComputeHash(Encoding.UTF8.GetBytes(input)))
                        .Replace("-", string.Empty).ToLower();
                }

推荐