为什么base64解码字符串在Python2.7和Linux中是不同的

时间:2016-04-18 06:10:44

标签: python linux base64

我在linux中有以下命令, 文件test64.dat中的base64编码字符串'rITqHhVbOjGIWelaJbg =='。 使用过的命令 -

# base64 -d -i test64.dat >> test.dat
# echo "IV=" `hexdump test.dat | head -1 | cut -f 2- -d ' ' | sed s/' '//g ` >> abc.txt
# cat abc.txt
IV= 84ac1eea7515e86c21c6a5676f6b6ec9

我想使用python base64模块解码与test64.dat中相同的字符串, 我试过下面的代码

hexdump.dump(base64.b64decode('rITqHhVbOjGIWelaJbg==')) 

它输出为。

'AC 84 EA 1E 15 5B 3A 31 88 59 E9 5A 25 B8'

任何人都可以告诉我为什么base64解码输出不同,我做错了吗?

1 个答案:

答案 0 :(得分:2)

这里有两个问题:

1)您的输入无效。它最后有太多=,因此Linux输出包含“base64:invalid input”,你之后将其快速解码为十六进制。

2)hexdump没有给你你真正想要的格式;它将它视为一对字节对,并反转每对。例如,“ABCD”的输入最终默认输出为“4241 4443” - 请注意41之前的42和43之前的44的排序。

修复输入后,可以将输出格式传递给hexdump,为您提供所需的格式

echo rITqHhVbOjGIWelaJbg= | base64 -d | hexdump -e '16/1 "%02X " "\n"'

输出:

AC 84 EA 1E 15 5B 3A 31 88 59 E9 5A 25 B8