我正在lubuntu 15.04上使用基于Java的neo4j图形数据库。
neo4j HTTP身份验证标头使用'username:password'的base64编码(不包括引号)。使用wireshark,我可以看到neo4j生成的base64代码。
但是,如果我使用ubuntu coreutils base64编码相同的字符串,则会得到略有不同的编码。neo4j不接受此编码。
两种编码均解码为正确的用户名:密码字符串
例
用户名= neo4j
和密码=@N
Neo4j给出neo4j:@N
as 的编码值,按预期bmVvNGo6QE4=
解码neo4j:@N
$ echo 'bmVvNGo6QE4=' | base64 --decode
neo4j:@N
Ubuntu coreutils base64
返回neo4j:@N
as 的编码值bmVvNGo6QE4K
(在最后一个字符中有所不同),但仍可以正确解码;
$ echo 'neo4j:@N' | base64
bmVvNGo6QE4K
$ echo 'bmVvNGo6QE4K' | base64 --decode
neo4j:@N
为什么是这样?我需要做什么来获得一致的编码?
=
在正常情况下,Base64是填充(并且仅在末尾有效)。一个编码的字符串具有填充而另一字符串没有填充(或更普遍地说,两个字符串具有不同的填充量)这一事实是一个致命的问题,因为两者的长度不同,因此不可能完全相同。