我有一个 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 函数不同-LMLPHP

我对编码了解不多。请告诉我在上面的 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 个字符。
  • 10-05 20:54