我有一个 C# 函数,如下所示:
string stringvalue = "530500480530490480530480480520570480520510500490";
var encodedvalue= Encoding.Unicode.GetBytes(stringvalue);
using (HashAlgorithm ssp = System.Security.Cryptography.HashAlgorithm.Create("SHA256"))
{
var digest = ssp.ComputeHash(encodedvalue);
return BitConverter.ToString(digest);
}
我需要创建一个与上述代码匹配的 javascript 函数,以便 C# 和 JS 的最终结果相同。
目前在我的 JS 代码中,我正在使用这个:
var hash = CryptoJS.SHA256("530500480530490480530480480520570480520510500490");
var hexhash = hash.toString(CryptoJS.enc.hex);
这是我的 hexhash 的结果:
d956678c8f12c65299daf35019a9a1eb3e6eb9855fd850aeb5aafe46057d179e
但是在我的 C# 代码中,这行
var digest = ssp.ComputeHash(bPass);
返回以下数组:我对编码了解不多。请告诉我在上面的 c# 代码中填充了什么类型的结果?如果我没记错的话,ComputeHash 正在返回字节,但我需要大量阅读来确认这又是一个漫长的学习时间
我尝试了许多不同的方法来转换 JS Sha256 代码,但没有成功。我被困在这条特定的线路上将近一天。
请帮忙。谢谢
编辑:
抱歉代码错误。我已经更新了 C# 代码。 ComputeHash 接受一个数组
最佳答案
在我的示例中,我使用 System.Security.Cryptography.SHA256Managed 在 C# 中获取 SHA256。
SHA256Managed.ComputeHash 方法将一个字节数组作为参数并返回另一个字节数组。现在我们需要将您的字节数组转换回字符串。
以下代码返回与 Javascript SHA-256 相同的结果。
byte[] bytes = Encoding.UTF8.GetBytes("530500480530490480530480480520570480520510500490");
SHA256Managed hashstring = new SHA256Managed();
byte[] hash = hashstring.ComputeHash(bytes);
string hashString = string.Empty;
foreach (byte x in hash)
{
hashString += String.Format("{0:x2}", x);
}
return(hashString);
只是为了解释: String.Format("{0:x2}", x)