簡體   English   中英

使用 Python 的 Base64 不正確的填充錯誤

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

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