Я использую 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
Почему это? Что я должен сделать, получают последовательное кодирование?
Вы кодируете (немного) различные строки:
$ 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=