我正在使用带有以下代码的 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 使用本身不符合 FIPS 的底层 SHA256Managed 实现。
通过 MSDN 文档搜索,我发现 KeyedHashAlgorithm 的唯一 SHA256 实现是 HMACSHA256。
我需要使用带键控的 SHA256 哈希对 Web 服务请求进行签名(因此我无法更改哈希类型),并且我必须能够在启用 FIPS 的环境中运行。
谷歌搜索显示 SHA256CryptoServiceProvider 和 SHA256Cng 都是符合 FIPS 的创建 SHA256 哈希的方法,但似乎都不支持创建键控哈希。