我正在使用 HMACSHA256 和以下代码创建一个密钥 SHA256 哈希:
HMACSHA256 hmac = new HMACSHA256(Encoding.UTF8.GetBytes(secretKey);
byte[] hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(data));
string hashResult = string.Empty;
for (int i = 0; i < hash.Length; i++)
{
hashResult += hash[i].ToString("x2"); // hex format
}
这工作得很好,但是,它在启用 FIPS 的环境中失败,因为 HMACSHA256 使用底层 SHA256Managed 实现,该实现本身不符合 FIPS。
通过搜索 MSDN 文档,我发现 KeyedHashAlgorithm 的唯一 SHA256 实现是 HMACSHA256。
我需要使用密钥 SHA256 哈希来签署 Web 服务请求(因此我无法更改哈希类型),并且我必须能够在启用 FIPS 的环境中运行。
谷歌搜索显示 SHA256CryptoServiceProvider 和 SHA256Cng 都是创建 SHA256 哈希值的符合 FIPS 的方法,但似乎都不支持创建密钥哈希值。
我知道这已经过时了,但看起来微软已经解决了这个问题。我在 Windows 8 上运行 .NET 4.5.1。我无法确定修复此问题的 BCL 或操作系统版本。
this.m_hash1 = HMAC.GetHashAlgorithmWithFipsFallback((Func<HashAlgorithm>) (() => (HashAlgorithm) new SHA256Managed()), (Func<HashAlgorithm>) (() => HashAlgorithm.Create("System.Security.Cryptography.SHA256CryptoServiceProvider")));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)