我在 lubuntu 15.04 上使用基于 java 的 neo4j 图形数据库。
neo4j HTTP 身份验证标头使用“用户名:密码”的 base64 编码(不包括引号)。使用 wireshark 我可以看到 neo4j 生成的 base64 代码。
但是,如果我使用 ubuntu coreutils base64 对相同的字符串进行编码,我会得到略有不同的编码。 neo4j 不接受此编码。
两种编码均解码为正确的用户名:密码字符串
例子
用户名=neo4j
和 密码=@N
Neo4j 给出了编码值,其neo4j:@N
解码bmVvNGo6QE4=
结果符合neo4j:@N
预期
$ echo 'bmVvNGo6QE4=' | base64 --decode
neo4j:@N
Ubuntu coreutils返回asbase64
的编码值(最后一个字符不同)但仍然可以正确解码;neo4j:@N
bmVvNGo6QE4K
$ echo 'neo4j:@N' | base64
bmVvNGo6QE4K
$ echo 'bmVvNGo6QE4K' | base64 --decode
neo4j:@N
这是为什么?我需要做什么才能获得一致的编码?
答案1
您正在对(略)不同的字符串进行编码:
$ 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=