Powershell SHA-1 和 base64 编码

问题描述 投票:0回答:3

尝试在powershell中生成空字符串的sha1 base64哈希值

$enc      = [system.Text.Encoding]::UTF8
$string   = ""
$data=$enc.GetBytes($string)
$sha1 = New-Object System.Security.Cryptography.SHA1CryptoServiceProvider
$ResultHash = $sha1.ComputeHash($data)
$str_out = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($ResultHash))
write-host $str_out

结果是

MjE4IDU3IDE2MyAyMzggOTQgMTA3IDc1IDEzIDUwIDg1IDE5MSAyMzkgMTQ5IDk2IDI0IDE0NCAxNzUgMjE2IDcgOQ==

我应该收到

2jmj7l5rSw0yVb/vlWAYkK/YBwk=

请问有人可以建议吗?

powershell sha1
3个回答
0
投票

ComputeHash
的输出已经是一个字节数组,而不是字符串 -
[Text.Encoding]::UTF8.GetBytes($ResultHash)
在这里没有任何意义。

删除该部分,它将按预期工作:

$enc      = [system.Text.Encoding]::UTF8
$string   = ""
$data=$enc.GetBytes($string)
$sha1 = New-Object System.Security.Cryptography.SHA1CryptoServiceProvider
$ResultHash = $sha1.ComputeHash($data)
$str_out = [Convert]::ToBase64String($ResultHash)
write-host $str_out

0
投票

基于 Mathias R. Jessen 的答案的更简洁的版本

最新版本(PS 7 和 Net Core)SHA1 有一个静态方法 HashData - docssource

$txt    = ""
$bytes  = [Text.Encoding]::UTF8.GetBytes($txt)
$sha1   = [Security.Cryptography.SHA1]::HashData($bytes)
$result = [Convert]::ToBase64String($sha1)
Write-Host $result

-1
投票

您期望的编码的 Base64 字符串不是 UTF-8 编码。

如果你想得到

2jmj7l5rSw0yVb/vlWAYkK/YBwk=
你必须更换:

$str_out = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($ResultHash))

$str_out = [Convert]::ToBase64String($ResultHash)

© www.soinside.com 2019 - 2024. All rights reserved.