我有一个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)
> X表示十六进制格式.
> 2表示2个字符.