在python 3中替换base64编码中的填充

2024-10-03 17:26:49 发布

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

import base64
s = "05052020"

Python2.7

base64.b64encode(s)

输出为字符串'MDUwNTIwMjA='

python 3.7

base64.b64encode(b"05052020") 

输出为个字节

b'MDUwNTIwMjA='

我想将=替换为“a”

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

我意识到这是一种肮脏的方式,我怎样才能做得更好呢

编辑: 预期结果:

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


Tags: 字符串代码import编辑字节方式replace意识
2条回答

在Python3中,字节字符串支持与unicode字符串几乎相同的方法(除了encode/decode)。所以你可以做:

s = base64.b64encode(b"05052020").replace(b'=', b'a')

获取b'MDUwNTIwMjAa'字节字符串

如果需要unicode字符串,只需对其进行解码:

s = base64.b64encode(b"05052020").replace(b'=', b'a').decode()

'MDUwNTIwMjAa'作为普通(unicode)Python 3字符串

为什么需要更换衬垫?如果=字符破坏了某些内容,只需删除它们,这些字符不包含任何信息,没有它们,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'

相关问题 更多 >