代码之家  ›  专栏  ›  技术社区  ›  Dariusz Krynicki

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

  •  0
  • Dariusz Krynicki  · 技术社区  · 4 年前
    import base64
    s = "05052020"
    

    蟒蛇2。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输出字符串

    0 回复  |  直到 4 年前
        1
  •  0
  •   Serge Ballesta    4 年前

    在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
  •  0
  •   lenik    4 年前

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