![](/img/trans.png)
[英]Python: Ignore 'Incorrect padding' error when base64 decoding
[英]Base64 Incorrect padding error using Python
我正在嘗試將大約 200 個 Base64 數據的 Base64 解碼為十六進制,但出現以下錯誤。 它對其中的 60 個進行解碼,然后停止。
ABHvPdSaxrhjAWA=
0011ef3dd49ac6b8630160
ABHPdSaxrhjAWA=
Traceback (most recent call last):
File "tt.py", line 36, in <module>
csvlines[0] = csvlines[0].decode("base64").encode("hex")
File "C:\Python27\lib\encodings\base64_codec.py", line 43, in base64_decode
output = base64.decodestring(input)
File "C:\Python27\lib\base64.py", line 325, in decodestring
return binascii.a2b_base64(s)
binascii.Error: Incorrect padding
來自 CSV 的一些原始 Base64 源
ABHPdSaxrhjAWA=
ABDPdSaxrhjAWA=
ABDPdSaxrhjAWA=
ABDPdSaxrhjAWA=
ABDPdSaxrhjAWA=
ABDPdSaxrhjAWA=
ABDPdS4xriiAVQ=
ABDPdSqxrizAU4=
ABDPdSrxrjPAUo=
您的 CSV 文件中至少有一個字符串不是 Base64 字符串,是損壞(損壞)的 Base64 字符串,或者是缺少所需的=
填充的字符串。 您的示例值ABHPdSaxrhjAWA=
很短一個=
或缺少另一個數據字符。
正確填充的 Base64 字符串的長度是 4 的倍數,因此您可以輕松地重新添加填充:
value = csvlines[0]
if len(value) % 4:
# not a multiple of 4, add padding:
value += '=' * (4 - len(value) % 4)
csvlines[0] = value.decode("base64").encode("hex")
如果該值仍然無法解碼,則您的輸入已損壞或開始時 Base64 無效。
對於示例錯誤ABHPdSaxrhjAWA=
,上面添加了一個=
以使其可解碼:
>>> value = 'ABHPdSaxrhjAWA='
>>> if len(value) % 4:
... # not a multiple of 4, add padding:
... value += '=' * (4 - len(value) % 4)
...
>>> value
'ABHPdSaxrhjAWA=='
>>> value.decode('base64')
'\x00\x11\xcfu&\xb1\xae\x18\xc0X'
>>> value.decode('base64').encode('hex')
'0011cf7526b1ae18c058'
我需要強調的是,您的數據可能只是損壞了。 您的控制台輸出包括一個有效的值和一個失敗的值。 有效的一個字符長了一個字符,這是唯一的區別:
ABHvPdSaxrhjAWA=
ABHPdSaxrhjAWA=
注意第 4 位的v
; 這是第二個示例中缺少的。 這可能表明您的 CSV 數據發生了某些事情,導致該字符從第二個示例中刪除。 添加填充可以使第二個值再次可解碼,但結果將是錯誤的。 我們無法告訴您這兩個選項中的哪一個是這里的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.