是否存在一种内置方法来生成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输出的二进制数据。
答案 0 :(得分:0)
我认为您正在这样做,因为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 =