【问题标题】:Powershell SHA-1 and base64 encodePowershell SHA-1 和 base64 编码
【发布时间】:2021-03-31 18:25:13
【问题描述】:

尝试在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


    【解决方案1】:

    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
    

    【讨论】:

      【解决方案2】:

      您预期的 base64 编码字符串不是 UTF-8 编码的。

      如果你想得到2jmj7l5rSw0yVb/vlWAYkK/YBwk=,你必须替换:

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

      通过

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-18
        • 2016-01-09
        • 1970-01-01
        • 1970-01-01
        • 2011-09-13
        • 2019-04-15
        • 2013-12-03
        • 1970-01-01
        相关资源
        最近更新 更多