Кодирование Powershell SHA-1 и base64

#powershell #sha1

Вопрос:

Попробуйте сгенерировать хэш sha1 base64 пустой строки в powershell

 $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=
 

Пожалуйста, не мог бы кто-нибудь дать совет?

Ответ №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)