gpt4 book ai didi

c# - 为什么 ComputeHash 的行为不是确定性的?

转载 作者:可可西里 更新时间:2023-11-01 08:16:05 25 4
gpt4 key购买 nike

我遇到了一个有趣的问题。似乎“HMACSHA256”散列的 ComputeHash() 的行为不是确定性的。如果我使用 HashAlgorithm.Create(“HMACSHA256”) 创建两个 HashAlgorithm 实例......并且运行 ComputeHash,我得到两个不同的结果。下面是展示此行为的示例静态类。

internal static string HashPassword(byte[] bAll)
{
using (HashAlgorithm s = HashAlgorithm.Create("HMACSHA256"))
{
return Convert.ToBase64String(s.ComputeHash(bAll));
}
}

我还尝试使调用成为非静态的(实际上它开始时是非静态的,我对我的输入数组进行了两次、三次和四次检查。每次调用都完全相同。我什至做了一些事情在即时窗口中,如:

Convert.ToBase64String(HashAlgorithm.Create("HMACSHA256").ComputeHash(bAll)

并通过方法中的断点在 immidiates 窗口中运行两次,返回两个不同的哈希值。

我知道 Hash 应该是确定性的.. 那么是什么给出的呢?在调试器中运行有什么问题吗?或者有什么其他的想法吗?真的,现在这只是两个奇怪的词:-P ..

谢谢乔希

最佳答案

HMAC 是一个键控哈希。我在您的示例代码中没有看到 key 。

HashAlgorithm.Create("HMACSHA256") 创建一个 HashAlgorithm 实例,因此它对 key 一无所知。它可能只是调用 this HMACSHA256 Constructor :

public HMACSHA256()

Initializes a new instance of the HMACSHA256 class with a randomly generated key.

你想要this constructor :

public HMACSHA256(byte[] key)

Initializes a new instance of the HMACSHA256 class with the specified key data.

如果您不想硬编码 HMAC 算法,您可以使用 KeyedHashAlgorithm.Create并通过设置 KeyedHashAlgorithm.Key 来提供特定的 key 属性(property)。

如果您不想使用 key ,请使用 SHA256 等非 key 散列。

关于c# - 为什么 ComputeHash 的行为不是确定性的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3186460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com