当前位置: 首页 > 知识库问答 >
问题:

基于C#的HMAC SHA256哈希计算

通迪
2023-03-14
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);
}
var shaKeyBytes = System.Text.Encoding.UTF8.GetBytes(key);

共有1个答案

况鸿雪
2023-03-14

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

例如。若要复制其结果,请将键视为字符串:

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

产生

559bd871bfd21ab76ad44513ed5d65774f9954d3232ab68dab1806163f806447
 类似资料:
  • 问题内容: 我在Java中有以下代码: 以及C#中的以下代码: 字节数组“ secretKey”和“ bytes”是等效的,但字节数组“ rawHmac”不同,字符串“ result”不同。谁能看到原因? 问题答案: 不要这样做: 这将使用平台默认编码将字符串转换为字节数组。平台之间可能会有所不同,而您想要一些可重复的东西。我建议使用UTF-8: (当然,对密钥执行相同的操作。) 然后,您应该在C

  • 问题内容: 我正在使用网络爬虫(请不要建议现有的,这不是一种选择)。我按照预期的方式工作。我唯一的问题是,当前我正在使用一种服务器/客户端模型,其中服务器进行爬网和处理数据,然后将其放置在中央位置。 此位置是从我编写的类创建的对象。在内部,该类维护一个定义为 我将数据存储在地图中,使网址成为键(我保持这些网址唯一),而hasmap值存储该网址的相应数据字段,例如标题,值等 我偶尔会序列化所使用的内

  • 主要内容:Hashtable 类中的属性,Hashtable 类中的方法在 C# 中,Hashtable(哈希表) 类表示根据键的哈希代码进行组织的键(key)/值(value)对的集合,可以使用键来访问集合中的元素。也就是说当您需要使用键来访问指定元素时,可以选择使用哈希表。 Hashtable 类中的属性 下表中列出了 Hashtable 类中一些常用的属性: 属性 描述 Count 获取哈希表中包含的键值对的个数 IsFixedSize 获取一个值,用来表示哈希

  • 我想向用户展示他们的客户端工具也可能生成的散列,因此我一直在比较在线散列工具。我的问题是关于它们的散列形式,因为奇怪的是,它们是不同的。 在快速搜索之后,我用5进行了测试: http://www.convertstring.com/hash/sha256 http://www.freeformatter.com/sha256-generator.html#ad-output http://onli

  • 我刚刚讨论了散列码的概念,遇到了一行:

  • 我正在尝试使用亚马逊的弹性代码转换器。这里我需要sha-256散列一个字符串;http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html 我已经尝试了我在网上找到的任何方法,但我找不到与页面和一些在线哈希网站提供的相同的结果。 下面是要散列的字符串,您可以从上面的链接中找到; 以下是预期结果: 3