尝试在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=
请问有人可以建议吗?
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
您期望的编码的 Base64 字符串不是 UTF-8 编码。
如果你想得到
2jmj7l5rSw0yVb/vlWAYkK/YBwk=
你必须更换:
$str_out = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($ResultHash))
由
$str_out = [Convert]::ToBase64String($ResultHash)