javascript – C#SHA256 ComputeHash结果与CryptoJS SHA256函数不同

我有一个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);返回以下数组:
javascript  –  C#SHA256 ComputeHash结果与CryptoJS SHA256函数不同

我对编码知之甚少.请告诉我上面的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个字符.

上一篇:JavaScript加密和PHP解密


下一篇:javascript – Crypto.js:IE 11中未定义“Uint8ClampedArray”