解码和编码数据后的不同输出(base64)

时间:2016-10-18 15:52:35

标签: python base64

如果我跑:

import base64
data = open('1.dat', 'rb').read()
decoded = base64.b64decode(data)
encoded = base64.b64encode(decoded)
data == encoded

结果我得到“假”? 如何解码/编码以获得原始结果?

3 个答案:

答案 0 :(得分:1)

不幸的是,Base64不是base64。实现中可能存在差异。一些实现例如插入行在编码时每76个字符中断,有些则没有。

答案 1 :(得分:0)

您必须在b64encode()之前b64decode()数据:

>>> import base64
>>> data = b"qwertzuiop"
>>> encoded = base64.b64encode(data)
>>> decoded = base64.b64decode(encoded)
>>> data == decoded
True

如果您的输入文件已经是base64,则需要首先b64decode(),而不是编码。所以你的代码应该是这样的:

import base64
data = open('1.dat', 'rb').read()  # base64 encoded string
decoded = base64.b64decode(data)
encoded = base64.b64encode(decoded)
data == encoded

如果结果为False,则data的Base64编码方式与base64模块的编码方式不同。

答案 2 :(得分:0)

base64的编码方式有一定的灵活性,例如插入换行符。可能还有一些替代字符,base64 module允许您在编码和解码时指定。由您决定是否指定了正确的替换字符,否则很容易比较两个字符串而忽略任何换行符或空格:

''.join(data.split()) == ''.join(encoded.split())