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

是否存在一种内置方法来生成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)
$256String= $hashString.Replace('-','').ToLower()
$sha256String="(stdin)= "+$256String
$sha256String

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

lryup 回答:如何使用PowerShell将sha256哈希输出作为二进制数据而不是十六进制输出?

我认为您正在这样做,因为ComputeHash方法已经返回了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)

返回

  

n4bQgYhMfWWaL + qgxVrQFaO / TxsrC4Is0V1sFbDwCgg =

本文链接:https://www.f2er.com/3118611.html

大家都在问