解码和编码数据后的不同输出(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())
如果我运行:
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())