Разница между openssl base64 и btoa в javascript - PullRequest
0 голосов
/ 15 ноября 2018

У меня разные результаты, когда я пытаюсь кодировать строку в base64 с помощью функции btoa openssl или javascript (последний символ отличается).

# From a bash terminal on Ubuntu
echo 'admin:passw0rd' | openssl base64
# returns YWRtaW46cGFzc3dvcmQK

# From Chrome's javascript console
btoa('admin:passw0rd')
# returns YWRtaW46cGFzc3cwcmQ=

Онлайн-сервисы кодирования base64, кажется, дают тот же результаткак btoa.Алгоритм прост, и пароль не содержит никаких специальных символов.Так что же может объяснить эту разницу?

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Только что проверил, и я подтверждаю ваши выводы:

Терминал MAC / командная строка:

$ echo 'admin:passw0rd' | openssl base64
YWRtaW46cGFzc3cwcmQK
$ echo 'admin:passw0rd' | base64
YWRtaW46cGFzc3cwcmQK

Консоль

window.btoa("admin:passw0rd")
"YWRtaW46cGFzc3cwcmQ="

НО, когда вы меняете командуto:

$ echo -n 'admin:passw0rd' | base64
YWRtaW46cGFzc3cwcmQ=

Это дает тот же результат.По умолчанию echo добавляет символ новой строки в строку, поэтому вы передаете его в команду base64.При добавлении -n это не будет сделано.Из справочных страниц:

-n    Do not print the trailing newline character.  This may also be achieved by appending `\c' to the end of the string,
       as is done by iBCS2 compatible systems.  Note that this option as well as the effect of `\c' are implementation-
       defined in IEEE Std 1003.1-2001 (``POSIX.1'') as amended by Cor. 1-2002.  Applications aiming for maximum portabil-
       ity are strongly encouraged to use printf(1) to suppress the newline character.
0 голосов
/ 15 ноября 2018

echo добавляет новую строку в команду openssl.

Вы должны использовать опцию -n (без новой строки) с командой echo:

echo -n 'admin:passw0rd' | openssl base64
YWRtaW46cGFzc3cwcmQ=
...