Почему там несоответствие в выводе base64?

Я использую Java базирующаяся neo4j база данных графика по lubuntu 15.04.

neo4j заголовок Аутентификации HTTP использует кодирование base64 'username:password' (не включая кавычки). Используя wireshark I видят код base64, сгенерированный neo4j.

Однако, если я использую ubuntu coreutils base64 для кодирования той же строки, я получаю немного отличающееся кодирование. Это кодирование не принято neo4j.

Обе кодировки декодируют к корректной строке username:password

Пример

имя пользователя =neo4j и пароль =@N

Neo4j дает закодированное значение neo4j:@N как bmVvNGo6QE4= который декодирует к neo4j:@N как ожидалось

$ echo 'bmVvNGo6QE4=' | base64 --decode
neo4j:@N

Ubuntu coreutils base64 возвращает закодированное значение neo4j:@N как bmVvNGo6QE4K (который отличается по последнему знаку), но все еще декодирует правильно;

$ echo 'neo4j:@N' | base64
bmVvNGo6QE4K
$ echo 'bmVvNGo6QE4K' | base64 --decode
neo4j:@N

Почему это? Что я должен сделать, получают последовательное кодирование?

12
задан 30 September 2015 в 14:34

1 ответ

Вы кодируете (немного) различные строки:

$ echo 'bmVvNGo6QE4=' | base64 --decode | od -c
0000000   n   e   o   4   j   :   @   N
0000010
$ echo 'neo4j:@N' | od -c
0000000   n   e   o   4   j   :   @   N  \n
0000011

echo добавляет запаздывающий символ новой строки. Это приводит к отличающейся кодировке.

Использование printf вместо этого, чья выходная спецификация более точна:

$ printf '%s' 'neo4j:@N' | base64              
bmVvNGo6QE4=
56
ответ дан 23 November 2019 в 03:27

Другие вопросы по тегам:

Похожие вопросы: