我有一些base64编码的数据,我想转换回二进制,即使其中有填充错误。如果我使用
base64.decodestring(b64_string)
它会引发“不正确的填充”错误。还有别的办法吗?
更新:感谢所有的反馈。老实说,上面提到的所有方法听起来都不太靠谱,所以我决定尝试一下openssl。以下命令很管用:
openssl enc -d -base64 -in b64string -out binary_data
发布于 2018-03-24 06:22:09
在解码之前,你似乎只需要在你的字节中添加填充。关于这个问题还有很多其他的答案,但我想指出的是(至少在Python3.x中) base64.b64decode
将截断任何额外的填充,前提是首先有足够的填充。
所以,像这样的东西:b'abc='
和b'abc=='
一样好(b'abc====='
也一样)。
这意味着您只需添加所需的最大填充字符数-即两个(b'=='
)-and base64将截断任何不必要的字符。
这可以让你写下:
base64.b64decode(s + b'==')
这比以下内容简单:
base64.b64decode(s + b'=' * (-len(s) % 4))
发布于 2010-05-31 15:37:09
只需根据需要添加填充即可。不过,还是听从了迈克尔的警告。
b64_string += "=" * ((4 - len(b64_string) % 4) % 4) #ugh
发布于 2015-09-11 15:28:07
使用
string += '=' * (-len(string) % 4) # restore stripped '='s
功劳归功于这里的某处评论。
>>> import base64
>>> enc = base64.b64encode('1')
>>> enc
>>> 'MQ=='
>>> base64.b64decode(enc)
>>> '1'
>>> enc = enc.rstrip('=')
>>> enc
>>> 'MQ'
>>> base64.b64decode(enc)
...
TypeError: Incorrect padding
>>> base64.b64decode(enc + '=' * (-len(enc) % 4))
>>> '1'
>>>
https://stackoverflow.com/questions/2941995
复制相似问题