微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

试图理解 HMAC SHA256

如何解决试图理解 HMAC SHA256

对于 API,我需要提供使用 HMAC SHA256 协议散列的安全信息。我想在 Azure sql DB 的存储过程中准备我的所有 API 请求,因此散列需要在 sql 中进行。我不认同这个想法,如果有更好的方法,我可以变得灵活。

目前我有一个问题,我不完全了解创建散列的不同方式如何导致不同的结果。例如;

使用 OpenSSL 的 Linux CMD

~$ echo "message" | openssl dgst -sha256 -hmac "key"

(标准输入)= 62b5378a72e18e8b220382be8a4fce0a341ab06afa6367fe664219713e11bb4d

PowerShell

$message = 'message'

$secret = 'key'

$hmacsha = New-Object System.Security.Cryptography.HMACSHA256

$hmacsha.key = [Text.Encoding]::ASCII.GetBytes($secret)

$signature = $hmacsha.ComputeHash([Text.Encoding]::ASCII.GetBytes($message))

$signature = [Convert]::ToBase64String($signature)

echo $signature

bp7ym3X//Ft6uuUn1Y/a2y/kLnIZARl2kXNDBl9Y7Uo=

在线工具

https://www.freeformatter.com/hmac-generator.html#ad-output 6e9ef29b75fffc5b7abae527d58fdadb2fe42e7219011976917343065f58ed4a

我的标量函数

https://gist.github.com/rmalayter/3130462获取函数

declare @query nvarchar(4000),@secret nvarchar(500);

set @query = 'message'
set @secret = 'key' 

select dbo.fn_HMAC('SHA2_256',cast(@query as varbinary(max)),CAST(@secret as varbinary(max)))

0x93552E8AB930FFCEE9E158A7EA5926A4F36025A1A0ED538763B26AF74147D299

所以这 4 个方法返回 4 个不同的哈希值。我知道我需要 OpenSSL 返回的 Has(第一个示例)。

你能帮我理解为什么这些选项返回不同的哈希值,以及如何在 Linux CMD 中获取 OpenSSL 生成的哈希值吗?

解决方法

明白了! HABO 是对的,它确实与我脚本中的 NVARCHAR 变量有关。一旦用 VARCHAR 替换它就起作用了!!!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。