tsql - 试图理解 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 中生成的哈希值?
解决方案
知道了!HABO 是对的,它确实与我脚本中的 NVARCHAR 变量有关。一旦用 VARCHAR 替换它就可以了!!!
推荐阅读
- mysql - SQL 数据库中作为主用户 ID 的特定格式
- javascript - angular & ngrx:升级到 version8 期间的问题
- python - 如何使用 selenium 和 python 在 dd 属性中提取没有名称的文本?
- javascript - 按分钟过滤数据 VueJs
- header - Rswag:授权标头出现在查询参数中
- node.js - ExpressJS - 通用响应中间件
- c++ - 理解嵌套的 lambda 表达式
- python - Python切片和替换
- firebase - 我可以将 GoogleAPI 与通过 Firebase 身份验证获取的 refresh_token 一起使用吗?
- python - 跳过在 python 中绘制 NaN 和 inf 值