【问题标题】:replace padding in base64 encoding in python 3在 python 3 中替换 base64 编码中的填充
【发布时间】:2020-06-08 12:23:58
【问题描述】:
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 输出字符串

【问题讨论】:

  • 预期结果是什么(字符串或字节)?你想要代码兼容 Python2 和 Python 3 吗?
  • Python3 中的代码和输出应为替换填充的字符串。

标签: python string byte encode


【解决方案1】:

在 Python 3 中,字节字符串支持几乎与 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 字符串。

【讨论】:

    【解决方案2】:

    为什么需要更换填充物?如果 = 字符破坏了某些内容,只需将其删除,这些字符不包含任何信息,并且 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'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-20
      • 2021-06-28
      • 2011-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-18
      相关资源
      最近更新 更多