如何使用 powershell 将 sha256 哈希输出作为二进制数据而不是十六进制?

How to get sha256 hash output as binary data instead of hex using powershell?

是否有内置方法可以将 SHA256 生成为给定字符串的二进制数据?基本上,我使用下面的 bash 脚本首先生成哈希作为二进制数据,然后进行 base64 编码。我想要的只是 Powershell 中的确切内容,以便两个输出相同:

clearString="test"
payloadDigest=`echo -n "$clearString" | openssl dgst -binary -sha256 | openssl base64 `
echo ${payloadDigest}

在 powershell 中,我可以使用以下脚本获取十六进制的 SHA256,但随后很难将其作为二进制数据获取:

$ClearString= "test"
$hasher = [System.Security.Cryptography.HashAlgorithm]::Create('sha256')
$hash = $hasher.ComputeHash([System.Text.Encoding]::UTF8.GetBytes($ClearString))

$hashString = [System.BitConverter]::ToString($hash)
6String= $hashString.Replace('-', '').ToLower()
$sha256String="(stdin)= "+6String
$sha256String

然后我可以使用 [Convert]::ToBase64String($Bytes) 转换为 base64,但在将其传递给 base64 转换之前,我如何获得类似于 bash 输出的二进制数据。

我认为你做得太过了,因为 ComputeHash 方法已经 returns 一个 Byte[] 数组(二进制数据)。要实现(我认为)您想要实现的目标,请不要将字节转换为字符串,因为那样会生成十六进制字符串。

$ClearString= "test"
$hasher = [System.Security.Cryptography.HashAlgorithm]::Create('sha256')
$hash = $hasher.ComputeHash([System.Text.Encoding]::UTF8.GetBytes($ClearString))
# $hash is a Byte[] array

# convert to Base64
[Convert]::ToBase64String($hash)

returns

n4bQgYhMfWWaL+qgxVrQFaO/TxsrC4Is0V1sFbDwCgg=