Я использую основанную на java базу данных neo4j graph на lubuntu 15.04.
HTTP-заголовок аутентификации neo4j использует кодировку base64 «имя пользователя: пароль» (не включая кавычки). Используя wireshark, я вижу код base64, сгенерированный neo4j.
Однако, если я использую Ubuntu Coreutils Base64 для кодирования той же строки, я получаю немного другую кодировку. Эта кодировка не принята neo4j.
Обе кодировки декодируются на правильное имя пользователя: строка пароля
пример
имя пользователя = neo4j
и пароль =@N
Neo4j дает закодированное значение , neo4j:@N
как bmVvNGo6QE4=
декодированием к , neo4j:@N
как и ожидалось
$ echo 'bmVvNGo6QE4=' | base64 --decode
neo4j:@N
Ubuntu coreutils base64
возвращает закодированное значение neo4j:@N
as bmVvNGo6QE4K
(которое отличается последним символом), но все равно правильно декодируется;
$ echo 'neo4j:@N' | base64
bmVvNGo6QE4K
$ echo 'bmVvNGo6QE4K' | base64 --decode
neo4j:@N
Почему это? Что мне нужно сделать, чтобы получить согласованное кодирование?
=
в обычном Base64 это дополнение (и действует только в конце). Тот факт, что одна закодированная строка имеет заполнение, а другая - нет (или, в более общем смысле, то, что две строки имеют разное количество заполнения), является мертвой раздачей того, что эти две строки имеют разную длину и, следовательно, не могут быть идентичными.