我需要使用SHA256哈希函数计算HMAC。我有一个以base64格式编码的秘密密钥。还有一个在线工具可以正确计算HMAC(已验证)。 http://www.freeformatter.com/hmac-generator.html 我编写了以下代码片段:
var signatureHashHexExpected = "559bd871bfd21ab76ad44513ed5d65774f9954d3232ab68dab1806163f806447";
var signature = "123456:some-string:2016-04-12T12:44:16Z";
var key = "AgQGCAoMDhASFAIEBggKDA4QEhQCBAYICgwOEBIUAgQ=";
var shaKeyBytes = Convert.FromBase64String(key);
using (var shaAlgorithm = new System.Security.Cryptography.HMACSHA256(shaKeyBytes))
{
var signatureBytes = System.Text.Encoding.UTF8.GetBytes(signature);
var signatureHashBytes = shaAlgorithm.ComputeHash(signatureBytes);
var signatureHashHex = string.Concat(Array.ConvertAll(signatureHashBytes, b => b.ToString("X2"))).ToLower();
System.Diagnostics.Debug.Assert(signatureHashHex == signatureHashHexExpected);
}
问题: 我的代码没有生成正确的HMAC。我使用了不同的在线工具和替代C#实现来验证不同的步骤。唯一没有确认的是从base64转换过来的部分。我错过了什么吗?
更新: 通过我的代码计算出的signatureHashHex是“a40e0477a02de1d134a5c55e4befa55d6fca8e29e0aa0a0d8acf7a4370208efc”
答案: 问题是由于一个误导性的文档引起的,该文档说明密钥以Base64格式提供。请参见接受的答案:
var shaKeyBytes = System.Text.Encoding.UTF8.GetBytes(key);
signatureHashHex
的结果是什么? - Ivar