为什么base64输出不一致?

我在lubuntu 15.04上使用基于java的neo4j图数据库。

neo4j HTTP身份validation标头使用base64编码’username:password’(不包括引号)。 使用wireshark我可以看到neo4j生成的base64代码。

但是,如果我使用ubuntu coreutils base64来编码相同的字符串,我会得到一个稍微不同的编码。 neo4j不接受此编码。

两种编码都解码为正确的用户名:密码字符串

username = neo4j ,密码= @N

Neo4j给出neo4j:@N的编码值neo4j:@NbmVvNGo6QE4=解码为neo4j:@N如预期

 $ echo 'bmVvNGo6QE4=' | base64 --decode neo4j:@N 

Ubuntu coreutils base64返回neo4j:@N的编码值neo4j:@NbmVvNGo6QE4K (在最后一个字符中有所不同),但仍能正确解码;

 $ echo 'neo4j:@N' | base64 bmVvNGo6QE4K $ echo 'bmVvNGo6QE4K' | base64 --decode neo4j:@N 

为什么是这样? 我需要做什么才能获得一致的编码?

您正在编码(稍微)不同的字符串:

 $ echo 'bmVvNGo6QE4=' | base64 --decode | od -c 0000000 neo 4 j : @ N 0000010 $ echo 'neo4j:@N' | od -c 0000000 neo 4 j : @ N \n 0000011 

echo添加一个尾随的换行符。 这导致不同的编码。

请改用printf ,其输出规范更精确:

 $ printf '%s' 'neo4j:@N' | base64 bmVvNGo6QE4= 
Interesting Posts