Javascript BTOA vs base64 no bash?

0

Eu preciso converter uma combinação de nome de usuário e senha em base64 antes de enviar para uma API.

A função BTOA do javascript está funcionando para mim, mas quando tento usar o comando base64 no bash, obtenho resultados ligeiramente diferentes.

Javascript:

btoa("hello");                   # aGVsbG8=
btoa("username:password");       # dXNlcm5hbWU6cGFzc3dvcmQ=
btoa("testing");                 # dGVzdGluZw==

Bash:

echo hello | base64              # aGVsbG8K
echo username:password | base64  # dXNlcm5hbWU6cGFzc3dvcmQK
echo testing | base64            # dGVzdGluZwo=

Os resultados são sempre semelhantes, mas diferentes.

O servidor espera a codificação de estilo JS, mas eu preciso usar o bash.

Por que os resultados são diferentes, mas semelhantes? Como posso produzir os resultados do javascript com o bash?

    
por Philip Kirkbride 03.08.2017 / 16:40

1 resposta

3

echo "proveitosamente" adiciona uma nova linha à saída, de modo que a base64 obedientemente codifica isso também. Diga echo para não adicionar uma nova linha ou use printf.

$ echo hello | od -c
0000000   h   e   l   l   o  \n
0000006
$ echo -n hello | od -c
0000000   h   e   l   l   o
0000005
$ printf '%s' hello | od -c
0000000   h   e   l   l   o
0000005
$ printf '%s' hello | base64
aGVsbG8=
$ echo -n hello | base64
aGVsbG8=
    
por 03.08.2017 / 16:50