我有一些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:赏} + X6
C#:0f9de8b39ee7187d92bb2b5817bb36ee
我应该在c#代码中更改哪些内容?
答案 0 :(得分:0)
如果您只想要字节数组,请跳过转换:
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));