Md5返回原始字节而不是十六进制

本文关键字:十六进制 字节 返回 原始 Md5 | 更新日期: 2023-09-27 18:10:19

我有一些PHP代码,我想用c#编写。

我的PHP代码:

$md5raw = md5($str2hash, true);
我的c#代码:
        static string GetMd5Hash(MD5 md5Hash, string input)
    {
        byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
        // Create a new Stringbuilder to collect the bytes 
        // and create a string.
        StringBuilder sBuilder = new StringBuilder();
        // Loop through each byte of the hashed data  
        // and format each one as a hexadecimal string. 
        for (int i = 0; i < data.Length; i++)
        {
            sBuilder.Append(data[i].ToString("x2"));
        }
        // Return the hexadecimal string. 
        return sBuilder.ToString();
    }

这两个代码的结果不相同

PHP: ' info '} ' ' +X ' 6 ' '
c#: 0 f9de8b39ee7187d92bb2b5817bb36ee

我应该在我的c#代码中改变什么?

Md5返回原始字节而不是十六进制

如果您只想要字节数组,请跳过转换:

static byte[] GetMd5Hash(MD5 md5Hash, string input)
{
    return md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
}

更新:

你绝对应该改变你的PHP函数返回编码数据,并在。net (c#)中使用相同的编码。

你想要的是一个包含二进制数据的字符串,但是这样你会因为在传输过程中二进制数据的重新编码而丢失信息。

static string GetMd5Hash(MD5 md5Hash, string input)
{
    // BUG: This code probably will lose information
    return Encoding.ASCII.GetString(md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input)));
}

你应该做的是使用你的c#函数作为你的问题,并使用它作为你的PHP函数:

$md5raw = bin2hex(md5($str2hash, true));