Powershell base64 против обычного base64

Я использую powershell для преобразования строки

$Text = 'ouser:v3$34@#85b&g%fD79a3nf'
$Bytes = [System.Text.Encoding]::Unicode.GetBytes($Text)
$EncodedText =[Convert]::ToBase64String($Bytes)
$EncodedText 

Однако при использовании https://www.base64decode.org/ или некоторых java-библиотек для кодирования base64 я получаю другая, более короткая версия.

Пример строки:

Это секрет и его нужно скрывать

результат powershell:

VABoAGkAcwAgAGkAcwAgAGEAIABzAGUAYwBYAUADAAGAGEAbgBkaACAAcwBoAG8AdQBsAGQAIABiAGUIABOAGkAZABlAG4A

нормальный результат base64:

VGhpcyBpcyBhIHNlY3JldCBhbmQgc2hvdWxkIGJlIGhpZGVu

При использовании веб-сайта я могу декодировать обе версии, однако, используя свой код Java, я могу декодировать только последнюю. Почему это? Существует ли более одной версии base64? Откуда эти различия?


person Zerg    schedule 11.08.2017    source источник
comment
Вы используете кодировку Unicode, что означает, что каждый символ имеет два байта, один из которых равен нулю для ASCII. Вместо этого используйте UTF8.   -  person wOxxOm    schedule 11.08.2017
comment
[System.Text.Encoding]::Unicode — это UTF-16, последний — UTF-8. Есть [System.Text.Encoding]::UTF8, которые вы можете использовать.   -  person Thomas Glaser    schedule 11.08.2017
comment
Действительно, кодировка вызывала такое поведение. К сожалению, вы не можете помечать комментарии как ответы.   -  person Zerg    schedule 11.08.2017


Ответы (1)


Добавление комментария от @Raziel в качестве ответа для лучшего обнаружения этого вопроса.

[System.Text.Encoding]::Unicode] — это UTF-16, последний — UTF-8. Есть [System.Text.Encoding]::UTF8, которые вы можете использовать.

person Andy Lamb    schedule 18.03.2019