Я використовую базу даних графіків neo4j на базі Java на lubuntu 15.04.
Заголовок аутентифікації neo4j HTTP використовує base64 кодування 'ім'я користувача: пароль' (не включаючи лапки). Використовуючи wireshark, я можу побачити базовий код64, породжений neo4j.
Однак якщо я використовую ubuntu coreutils base64 для кодування тієї ж строки, я отримую трохи інше кодування. Це кодування нео4j не приймається.
Обидві кодування декодуються до правильного імені користувача: рядок пароля
Приклад
ім'я користувача = 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
Чому це? Що потрібно зробити, щоб отримати послідовне кодування?
=
в звичайному Base64 є прокладка (і діє лише в кінці). Той факт, що одна кодована рядок має підкладку, а інша не (або загалом, що дві струни мають різну кількість прокладки), є мертвим піддаванням, що обидві мають різну довжину і, таким чином, не може бути однаковим.