Ich benutze die Java-basierte neo4j Graph-Datenbank auf Lubuntu 15.04.
Der HTTP-Authentifizierungsheader von neo4j verwendet die Base64-Codierung 'Benutzername: Kennwort' (ohne Anführungszeichen). Mit wireshark kann ich den von neo4j generierten base64-Code sehen.
Wenn ich jedoch die Ubuntu Coreutils Base64 verwende, um den gleichen String zu kodieren, erhalte ich eine etwas andere Kodierung. Diese Kodierung wird von neo4j nicht akzeptiert.
Beide Kodierungen dekodieren in die richtige Zeichenfolge für Benutzername: Kennwort
Beispiel
Benutzername = neo4jund Passwort =@N
Neo4j gibt den codierten Wert von neo4j:@Nas bmVvNGo6QE4=an, der neo4j:@Nwie erwartet decodiert wird
$ echo 'bmVvNGo6QE4=' | base64 --decode
neo4j:@N
Ubuntu coreutils base64gibt den codierten Wert von neo4j:@Nas zurück bmVvNGo6QE4K(der sich im letzten Zeichen unterscheidet), decodiert aber immer noch korrekt.
$ echo 'neo4j:@N' | base64
bmVvNGo6QE4K
$ echo 'bmVvNGo6QE4K' | base64 --decode
neo4j:@N
Warum ist das? Was muss ich tun, um eine konsistente Codierung zu erhalten?
=in normaler Base64 ist padding (und nur dann gültig , am Ende). Die Tatsache, dass eine codierte Zeichenfolge eine Auffüllung aufweist und die andere nicht (oder allgemeiner gesagt, dass die beiden Zeichenfolgen unterschiedliche Auffüllmengen aufweisen), ist ein toter Gewinn, dass die beiden unterschiedlich lang sind und daher möglicherweise nicht identisch sein können.