为什么base64输出不一致?

为什么base64输出不一致?

我在 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:@NbmVvNGo6QE4K

$ 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=

相关内容