[英]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.