base64 encode está dando resultados ambíguos [duplicado]

11

Eu estava codificando (do terminal) para a base64. Mas eu acho que os comandos não estão sendo executados corretamente.

$ echo 123456789 | base64
MTIzNDU2Nzg5Cg==

E quando eu fiz o mesmo em base64encode , obtive este resultado

MTIzNDU2Nzg5

Eu pensei que talvez echo esteja sendo codificado também, então eu corri

$ echo | base64
Cg==

Eu acho que estava certo, mas isso não ajudou como em outra instância:

$ echo qwertyuiop | base64
cXdlcnR5dWlvcAo=

e quando o mesmo foi codificado usando base64encode , o resultado foi

cXdlcnR5dWlvcA==

E não surpreendentemente, os resultados de base64encode foram aceitos (no SMTP)

Então, o que eu sinto falta aqui? e como posso converter com sucesso a string ou o numero em base64?

    
por Jarwin 05.11.2015 / 10:33

1 resposta

22

A resposta é simples. Com

echo 123456789 | base64

ou

echo qwertyuiop | base64

você sempre tem uma nova linha.

Evite esse comportamento usando a opção n para o comando echo

% echo -n qwertyuiop | base64
cXdlcnR5dWlvcA==

ou use printf

% printf qwertyuiop | base64
cXdlcnR5dWlvcA==

como você pode ver, é o mesmo resultado retornado por base64encode .

E como @AndreaCorbellini diz nos comentários

  

Base64 produz 4 bytes de saída para cada 3 bytes de entrada, portanto, nunca há uma correspondência de 1: 1 entre os bytes de entrada e os bytes de saída. Isso significa que uma nova linha pode acabar sendo codificada de maneiras diferentes, dependendo dos bytes que a precedem e seguem.

    
por A.B. 05.11.2015 / 10:41