簡體   English   中英

解碼和編碼數據后輸出不同(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

結果是“假”? 如何解碼/編碼以獲得原始結果?

不幸的是,Base64不是base64。 實現可能有所不同。 某些實現(例如插入行)在編碼時每76個字符中斷一次,而有些則沒有。

您必須先對數據進行b64encode() ,然后再b64decode()

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

如果輸入文件已經是base64,則需要先b64decode()進行b64decode()而不是編碼。 所以你的代碼應該是這樣的:

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

如果結果為False,則對Base64編碼的data與對base64模塊所做的編碼不同。

base64的編碼方式具有一定的靈活性,例如插入換行符。 在編碼和解碼時, base64模塊還允許您指定一些替代字符。 您可以確定是否指定了正確的替代字符,但是,在忽略任何換行符或空格的情況下比較兩個字符串很容易:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM