HMAC SHA256 Powershell 转换

Posted

技术标签:

【中文标题】HMAC SHA256 Powershell 转换【英文标题】:HMAC SHA256 Powershell convert 【发布时间】:2018-11-28 22:55:59 【问题描述】:

为什么下面的powershell脚本:

$privateKey = "843c1f887b"
$requestData = "1543448572|d.lastname@firm.com|Firstname Lastname"
function signRequest 
    $hmacsha = New-Object System.Security.Cryptography.HMACSHA256
    $hmacsha.key = [Text.Encoding]::ASCII.GetBytes($privateKey)
    $signature = $hmacsha.ComputeHash([Text.Encoding]::ASCII.GetBytes($requestData))
    $signature = [Convert]::ToBase64String($signature)
    $outi = $signature
    return $signature

转换为哈希:

FipK51tOtzb2m2yFQAf5IK6BNthClnqE24luMzYMPuo=

和其他具有相同输入的在线 hmac sha256 生成器:

162a4ae75b4eb736f69b6c854007f920ae8136d842967a84db896e33360c3eea

任何建议我在脚本中做错了什么? 谢谢!

【问题讨论】:

【参考方案1】:

您的代码生成正确的 HMAC,您只是对其进行 base64 编码,而不是像所有其他工具一样输出十六进制字符串。

改变这一行

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

$signature = [System.BitConverter]::ToString($signature).Replace('-','').ToLower()

解释:

[BitConverter]::ToString($signature) 产生一个十六进制字符串 (16-2A-4A-E7...) String.Replace('-','') 删除 - (162A4AE7...) String.ToLower() 小写最后的字符串 (162a4ae7...)

【讨论】:

以上是关于HMAC SHA256 Powershell 转换的主要内容,如果未能解决你的问题,请参考以下文章

hmac-sha256 2021-11-02

如何在基于 Android 的 Java 中使用 SECRET KEY 制作 HMAC SHA256? [复制]

在 php 中使用 SHA256 hmac 生成散列消息(key & msg 是假的)

hmac sha256和sha256的区别

对于 PBKDF2,使用 HMAC-SHA256 是不是比使用 HMAC-SHA-1 更安全?

在 Ruby 中使用 HMAC SHA256