Jos*_*del 12 .net c# hmac hashalgorithm
我遇到了一个有趣的问题..似乎ComputeHash()对于"HMACSHA256"哈希不是确定性的行为..如果我使用HashAlgorithm.Create("HMACSHA256")创建两个HashAlgorithm实例..并运行ComputeHash,我得到两个不同的结果..下面是一个展示这种行为的示例静态类.
internal static string HashPassword(byte[] bAll)
{
using (HashAlgorithm s = HashAlgorithm.Create("HMACSHA256"))
{
return Convert.ToBase64String(s.ComputeHash(bAll));
}
}
Run Code Online (Sandbox Code Playgroud)
我也尝试使调用非静态(实际上它开始非静态,我有双重和三重四重四重检查我的输入数组..它在每次调用时绝对相同..我甚至在immidiate中做过的事情窗口像:
Convert.ToBase64String(HashAlgorithm.Create("HMACSHA256").ComputeHash(bAll)
Run Code Online (Sandbox Code Playgroud)
并通过方法中的断点在immidiates窗口中运行两次返回两个不同的哈希值.
我知道哈希被认为是确定性的.那么是什么给出了什么呢?在调试器中运行是怎么回事?还是其他任何想法?真的,现在这只是两个奇怪的词:-P ..
谢谢乔希
dtb*_*dtb 24
HMAC是一个键控哈希.我没有看到示例代码中的密钥.
HashAlgorithm.Create("HMACSHA256")创建一个HashAlgorithm实例,因此它对密钥一无所知.它可能只是调用这个HMACSHA256构造函数:
public HMACSHA256()使用随机生成的密钥初始化HMACSHA256类的新实例.
你想要这个构造函数:
public HMACSHA256(byte[] key)使用指定的密钥数据初始化HMACSHA256类的新实例.
如果您不想对HMAC算法进行硬编码,可以使用KeyedHashAlgorithm.Create并通过设置KeyedHashAlgorithm.Key属性来提供特定密钥.
如果您不想使用密钥,请使用SHA256之类的非键控散列.
只是添加到这个,希望能够拯救某些人,让我感到头疼.
对于.Net Membership Provider,请确保您在web.config或app.config中具有该设置.否则它会自动生成自己的密钥...认证失败,然后最后好战地嘲笑你.
| 归档时间: |
|
| 查看次数: |
2895 次 |
| 最近记录: |