Lubuntu 15.04でJavaベースのneo4jグラフデータベースを使用しています。
Neo4j HTTP認証ヘッダーは、 'username:password'のbase64エンコードを使用します(引用符は含みません)。 wiresharkを使用すると、neo4jによって生成されたbase64コードを見ることができます。
ただし、ubuntu coreutils base64を使用して同じ文字列をエンコードすると、エンコードが少し異なります。このエンコードは、neo4jでは受け入れられません。
両方のエンコーディングは、正しいユーザー名:パスワード文字列にデコードします
例
ユーザー名= 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=