gpt4 book ai didi

javascript - 无法在Powershell中复制CryptoJS.enc.Hex.parse(hash)

转载 作者:行者123 更新时间:2023-12-03 01:26:52 25 4
gpt4 key购买 nike

我正在尝试在powershell中复制以下代码:

const hmac = CryptoJS.HmacSHA256(CryptoJS.enc.Hex.parse(hash), salt);
seed = hmac.toString(CryptoJS.enc.Hex);

我认为它的作用-将 hash变量解析为二进制表示形式,然后使用它与HmacSHA256创建新的哈希。我的PowerShell代码:
    $hmacsha = $hmacsha = New-Object System.Security.Cryptography.HMACSHA256
$hmacsha.key = [Text.Encoding]::UTF8.GetBytes($salt)
$signatureRaw = $hmacsha.ComputeHash([Text.Encoding]::UTF8.GetBytes($hash))
$signature = [System.BitConverter]::ToString($signatureRaw).Replace('-','').ToLower()

就我的理解而言, [Text.Encoding]::UTF8.GetBytes($hash)应该可以准确地实现该目标,但是结果不匹配。代码对跨语言的哈希和盐使用相同的值。 JS结果:
original hash: 1c46b79912c6109fe8ccf2dde7e8f931e7a95471e38e22865cd1df719a48d405
resulting hash: 4a9732c4a1f4bd2da1e59f3714c943ef662e664e11ea8364bee870916c42ac5c

Powershell结果:
original hash: 1c46b79912c6109fe8ccf2dde7e8f931e7a95471e38e22865cd1df719a48d405
resulting hash: 58693c49074149321ec8f440e36f88a3369203c91df8a9c308f78f09ac66733f

最佳答案

在Powershell代码中,哈希不得使用UTF8编码,而应进行十六进制解码,例如与

$hash = [byte[]] -split ($hash -replace '..', '0x$& ')

来自 here

使用以下代码:
$hmacsha = $hmacsha = New-Object System.Security.Cryptography.HMACSHA256
$salt = "0000000000000000004d6ec16dafe9d8370958664c1dc422f452892264c59526"
$hmacsha.key = [Text.Encoding]::UTF8.GetBytes($salt)
$hash = "1c46b79912c6109fe8ccf2dde7e8f931e7a95471e38e22865cd1df719a48d405"
$hash = [byte[]] -split ($hash -replace '..', '0x$& ')
$signatureRaw = $hmacsha.ComputeHash($hash)
$signature = [System.BitConverter]::ToString($signatureRaw).Replace('-','').ToLower()
Write-Output $signature

结果与JavaScript代码相同:
4a9732c4a1f4bd2da1e59f3714c943ef662e664e11ea8364bee870916c42ac5c

关于javascript - 无法在Powershell中复制CryptoJS.enc.Hex.parse(hash),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61864999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com