bash - 如何使用 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 输出的二进制数据。
解决方案
我认为您这样做过度了,因为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=
推荐阅读
- grails - 如何在 micronaut 中执行序列化
- regex - .htaccess 复杂的重写规则
- docker - 在 docker 容器中,我是 root 但 apt-get update 不起作用
- google-colaboratory - 如何在 Google Colab 上使用示例数据文件?
- c# - 是否可以在运行时限制 SQL WITHIN 查询/连接的资源?
- linux - 通过 ansible 获取 yum 更新列表失败
- javascript - 我什么时候应该使用 React 钩子?
- python - 如何在本地 Web 服务器上托管烧瓶 api?
- php - 获取用户在 Woocommerce 中购买最多的产品
- arrays - 插入排序 - 特定数组 O(n^(7/4))