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#代码中改变什么?
如果您只想要字节数组,请跳过转换:
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));