Sto usando il database dei grafici neo4j basato su Java su Lubuntu 15.04.
L'intestazione di autenticazione HTTP neo4j utilizza la codifica base64 di "nome utente: password" (senza virgolette). Usando WireShark posso vedere il codice Base64 generato da Neo4j.
Tuttavia se uso Ubuntu coreutils base64 per codificare la stessa stringa ottengo una codifica leggermente diversa. Questa codifica non è accettata da neo4j.
Entrambe le codifiche vengono decodificate con il nome utente corretto: stringa password
Esempio
username = neo4j
e password =@N
Neo4j fornisce il valore codificato di neo4j:@N
come bmVvNGo6QE4=
decodifica neo4j:@N
come previsto
$ echo 'bmVvNGo6QE4=' | base64 --decode
neo4j:@N
Ubuntu coreutils base64
restituisce il valore codificato di neo4j:@N
as bmVvNGo6QE4K
(che differisce nell'ultimo carattere) ma si decodifica ancora correttamente;
$ echo 'neo4j:@N' | base64
bmVvNGo6QE4K
$ echo 'bmVvNGo6QE4K' | base64 --decode
neo4j:@N
Perchè è questo? Cosa devo fare per ottenere una codifica coerente?
=
in Base64 normale è il riempimento (e valido solo alla fine). Il fatto che una stringa codificata abbia un'imbottitura e l'altra non (o più in generale, che le due stringhe abbiano una diversa imbottitura) è un omaggio morto che le due sono di diversa lunghezza e quindi non possono essere identiche.