base64 encode дает неоднозначные результаты [duplicate]

9

Я кодировал (из терминала) в base64. Но я думаю, что команды не выполняются должным образом.

$ echo 123456789 | base64
MTIzNDU2Nzg5Cg==

И затем, когда я сделал то же самое на base64encode , я получил этот результат

MTIzNDU2Nzg5

Я думал, что, возможно, echo также закодировано, поэтому я запустил

$ echo | base64
Cg==

Я думаю, я был прав, но это не помогло ни как в другом случае:

$ echo qwertyuiop | base64
cXdlcnR5dWlvcAo=

, и когда он был закодирован с использованием base64encode , результат был

cXdlcnR5dWlvcA==

И не удивительно, что результаты от base64encode были приняты (в SMTP)

Итак, что мне здесь не хватает? и как я могу успешно преобразовать строку или число в base64?

    
задан Jarwin 05.11.2015 в 09:33
источник

1 ответ

20

Ответ прост. С помощью

echo 123456789 | base64

или

echo qwertyuiop | base64

у вас всегда есть конечная новая строка.

Избегайте этого поведения, используя переключатель n для команды echo

% echo -n qwertyuiop | base64
cXdlcnR5dWlvcA==

или используйте printf

% printf qwertyuiop | base64
cXdlcnR5dWlvcA==

, как вы можете видеть, это тот же результат, который возвращается base64encode .

И как @AndreaCorbellini говорит в комментариях

  

Base64 производит 4 байта вывода для каждых 3 байтов ввода, поэтому никогда не возникает 1: 1 корреляция между входными байтами и выходными байтами. Это означает, что новая строка может быть закодирована по-разному, в зависимости от предшествующих и последующих байтов.

    
ответ дан A.B. 05.11.2015 в 09:41
источник