C#中的HMAC SHA256哈希计算

时间:2016-04-12 13:45:21

标签: c# hash hmac

我需要使用SHA256哈希函数来计算HMAC。我有一个以base64格式编码的密钥。还有一个正确计算HMAC(已验证)的在线工具。 http://www.freeformatter.com/hmac-generator.html 我写了以下代码片段:

var shaKeyBytes = System.Text.Encoding.UTF8.GetBytes(key);

问题: 我的代码没有生成正确的HMAC。我通过使用不同的在线工具和替代C#实现验证了不同的步骤。仅确认无法从base64进行转换。我错过了什么?

更新: 我的代码计算的signatureHashHex是“a40e0477a02de1d134a5c55e4befa55d6fca8e29e0aa0a0d8acf7a4370208efc”

解答: 该问题是由一个误导性的文档引起的,该文件说明密钥是以Base64格式提供的。请参阅接受的答案:

if (fbInterstitialAd.isAdValid == YES) {
    [fbInterstitialAd showAdFromRootViewController:viewController];
}

2 个答案:

答案 0 :(得分:6)

您的结果是正确的,区别在于您链接到的工具解码Base64作为键值并将其视为一系列字符。

E.g。要复制其结果,请将您的密钥视为字符串:

var shaKeyBytes = System.Text.Encoding.UTF8.GetBytes("AgQGCAoMDhASFAIEBggKDA4QEhQCBAYICgwOEBIUAgQ=");

哪个收益

559bd871bfd21ab76ad44513ed5d65774f9954d3232ab68dab1806163f806447

(这显然不是正确的方法)

答案 1 :(得分:0)

HMAC:这是一个消息验证码。它用于验证发件人的数据完整性,它是一种前向算法。它适用于发送方和接收方已知的共享密钥。在生成哈希值之前,我们必须对密钥和消息进行编码。我们可以使用编码 UTF8 ASCIIEncoding 中的任何一种。

UTF8编码:

var signature = "123456:some-string:2016-04-12T12:44:16Z";
var key = "AgQGCAoMDhASFAIEBggKDA4QEhQCBAYICgwOEBIUAgQ=";


var signatureBytes = System.Text.Encoding.UTF8.GetBytes(signature);
var shaKeyBytes = System.Text.Encoding.UTF8.GetBytes(key);

ASCIIEncoding编码:

var signature = "123456:some-string:2016-04-12T12:44:16Z";
var key = "AgQGCAoMDhASFAIEBggKDA4QEhQCBAYICgwOEBIUAgQ=";

var signatureBytes = System.Text.ASCIIEncoding.GetBytes(signature);
var shaKeyBytes = System.Text.ASCIIEncoding.GetBytes(key);

现在我们可以在上面的代码中使用这个编码的消息和键。