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

Different output after decode and encode data (base64)

如果我运行:

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

结果是 "False"? 如何decode/encode得到原始结果?

你必须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 模块的编码方式不同。

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

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

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