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



如果我运行:

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

我得到"假"作为结果?如何解码/编码获得原始结果?

Base64不是Base64。在实现上可能存在差异。有些实现例如在编码时每76个字符插入换行符,有些没有。

b64decode()之前必须先将数据b64encode():

>>> 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模块所做的。

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

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

最新更新