使用Python时Base64填充错误

2024-03-29 10:50:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将Base64解码为Hex,用于大约200个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=

Tags: inpylibline解码filepython27decode
1条回答
网友
1楼 · 发布于 2024-03-29 10:50:45

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")

如果值then仍然无法解码,则您的输入已损坏或以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=

注意第四位的v;这在第二个示例中是缺失的。这可能表示CSV数据发生了一些事情,导致该字符从第二个示例中删除。添加padding可以使第二个值再次可解码,但结果将是错误。我们不能告诉你这两个选择中的哪一个是原因。

相关问题 更多 >