为什么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:@N
为bmVvNGo6QE4=
解码为neo4j:@N
如预期
$ echo 'bmVvNGo6QE4=' | base64 --decode neo4j:@N
Ubuntu coreutils base64
返回neo4j:@N
的编码值neo4j:@N
为bmVvNGo6QE4K
(在最后一个字符中有所不同),但仍能正确解码;
$ 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=