首页 > 解决方案 > 试图理解 HMAC SHA256

问题描述

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

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

带有 OpenSSL 的 Linux CMD

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

(标准输入)= 62b5378a72e18e8b220382be8a4fce0a341ab06afa6367fe664219713e11bb4d

电源外壳

$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 个不同的 Hash。我知道我需要 OpenSSL 返回的 Has (第一个示例)。

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

标签: tsqlsha256hmac

解决方案


知道了!HABO 是对的,它确实与我脚本中的 NVARCHAR 变量有关。一旦用 VARCHAR 替换它就可以了!!!


推荐阅读