首页 > 解决方案 > 在 python 3 中替换 base64 编码中的填充

问题描述

import base64
s = "05052020"

python2.7

base64.b64encode(s)

输出是字符串'MDUwNTIwMjA='

蟒蛇3.7

base64.b64encode(b"05052020") 

输出是字节

b'MDUwNTIwMjA='

我想用“a”替换=

s = str(base64.b64encode(b"05052020"))[2:-1]
s = s.replace("=", "a")

我意识到这是肮脏的方式,所以我怎样才能做得更好?

编辑:预期结果:

带有替换填充的 Python 代码 3 输出字符串

标签: pythonstringbyteencode

解决方案


为什么需要更换衬垫?如果=字符破坏了某些东西,只需删除它们,这些字符不包含任何信息,并且 base64 编码在没有它们的情况下也能正常工作。

解码时,您可以填充几个=字符以防万一(总是不超过 3,所以我会填充 3,但多余的字符不会破坏任何内容:

>>> import base64
>>> base64.b64encode('aa')
'YWE='
>>> base64.b64decode('YWE==')
'aa'
>>> base64.b64decode('YWE===')
'aa'
>>> base64.b64decode('YWE======')
'aa'
>>> 

另一方面,放置a一个有效的 b64 编码字符可能会破坏您解码的字符串:

>>> base64.b64encode('aa')
'YWE='
>>> base64.b64decode('YWEa')
'aa\x1a'

推荐阅读