【问题标题】:How C# SHA512 shaM ComputeHash should be implemented Angular10 or JavascriptC# SHA512 shaM ComputeHash 应该如何实现 Angular10 或 Javascript
【发布时间】:2021-09-03 11:06:14
【问题描述】:

我有一个 C# 函数如下:

using(SHA512 shaM = new SHA512Managed()) {
  var hash = shaM.ComputeHash(Encoding.UTF8.GetBytes(nonce + appKey));
  StringBuilder hex = new StringBuilder(hash.Length * 2);
  foreach(byte b in hash)
  hex.AppendFormat("{0:x2}", b);

  secret = hex.ToString();
}

我需要创建一个与上面代码匹配的 javascript 函数,以便 C# 和 JS 的最终结果相同。

这是我的 hexhash 的结果:

5e7ae43531bffecfd539e0bd129f241b4365e92ba934484aba3f045203cf1157f680766c4ddaf0c772a9c870a68d252869da6db80fbcae644fa5e92725bf5be0

我从来没有遇到过这种函数,所以我需要在上面的函数中到底发生了什么以及我需要如何转换为角度 另外,我找到了下面的包 https://www.npmjs.com/package/js-sha512 并导入,但我不确定如何向该函数添加 nonce 和 appkey

我不确定使用上述 npm 包是否正确 请指导我如何进行?

【问题讨论】:

  • sha512(nonce + appkey); 你就完成了。
  • 您得到的哈希并没有告诉我们任何信息,因为您没有提供 nonceappkey 包含的内容。我们不能以任何(可管理的)方式“解码”哈希以了解原始值。
  • @SaniSinghHuttunen nonce: DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss.fffZ") appKey:"OTtLfrHQmFmgf68n"

标签: javascript c# angular


【解决方案1】:

Nonce 是一个密码术语。它是一个旨在仅使用一次以防止重放攻击的数字或值。在实现中缺少 IV 的算法中,它可以与 IV(初始化向量)一样有效。因此,它被添加到要散列的实际消息之前。在这种情况下,消息是appkey。 (或者更确切地说是变量appkey 中的值)。

要在 javascript 中获得相同的结果,您需要知道 nonceappkey 的值。然后像在 C# 中一样通过连接nonceappkey 来调用散列函数来生成散列:

let hash = sha512(nonce + appkey);

编辑:

在您对nonceappkey 的内容发表评论后,类似这样的内容应该会产生正确的结果:

let nonce = new Date().toISOString();
let appkey = 'OTtLfrHQmFmgf68n';
let hash = sha512(nonce + appkey);

请记住,nonce 随时间而变化,因此如果您需要在一端计算哈希并在另一端进行验证,那么您需要存储 nonce,以便验证者可以拥有相同的 nonce。

以下是.NET FiddleJSFiddle 示例,它们都产生相同的结果。

【讨论】:

  • 没有npm包可以实现吗?
  • @vinuta:是的。手动包含该功能或仅自己实现 SHA-512 算法。使用 npm 是最简单的方法。
  • 我刚刚测试了它的两种方式,它都可以正常工作,非常感谢您的解释
猜你喜欢
  • 1970-01-01
  • 2010-11-19
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-14
  • 1970-01-01
相关资源
最近更新 更多