Python:在base64解码时忽略“不正确的填充”错误

我有一些数据是base64编码的,我想转换回二进制,即使其中有填充错误。如果我使用

base64.decodestring(b64\u字符串)

它会引发“不正确的填充”错误。还有别的办法吗

更新:感谢所有的反馈。老实说,所有提到的方法听起来都有点刺耳
所以我决定试试openssl。以下命令用于处理:

openssl enc-d-base64-in-b64串出二进制数据

正如在其他回复中所说,base64数据可能会以各种方式被破坏

然而,正如维基百科所说,删除填充(base64编码数据末尾的“=”字符)是“无损的”:

从理论上讲,不需要填充字符,
因为丢失的字节数可以从这个数字中计算出来
以64位为基数

因此,如果这真的是base64数据唯一“错误”的地方,那么可以将填充添加回去。我提出这个方法是为了能够解析WeasyPrint中的“数据”URL,其中一些URL是base64,没有填充:

导入base64
进口稀土
def decode_base64(数据,altchars=b’+/’):
“”“解码base64,填充是可选的。
:param data:Base64数据作为ASCII字节字符串
:返回:已解码的字节字符串。
“””
数据=re.sub(rb'[^a-zA-Z0-9%s]+’%altchars,b’,数据)#标准化
缺少\u padding=len(数据)%4
如果缺少_填充:
数据+=b’=’*(4-缺少_填充)
返回base64.b64解码(数据,altchars)

此函数的测试:weasyprint/Tests/test_css.py#L68

发表评论