base64(二进制编解码)-常见内置模块

    由于看到hashlib模块中加密方法的应用。顺便也看了下常见的base64模块

    首先base64是将二进制文件转成字符串的一种编码方式。

    因为二进制文件包含无法显示和输出的字符。但我们需要处理这些二进制数据,却出现了无法显示,乱码的问题,这时候便出现了base64编码,它将二进制数据编码成字符串,让我们能进行处理二进制文件。

    base64编码基本原理:

    将二进制数据分成3字节一组,也就是说一组会有24bit,再将24bit分成4组,每组6bit。我们将4个数字作为索引,查对应的表,获得相应的4个字符,完成编码。

    当二进制不是3的倍数时,剩下1个或者两个字节时,Base64用\x00字节在末尾补足后,再在编码的末尾加上1个或2个=号,表示补了多少字节,解码的时候,会自动去掉。

    这样就可以愉快的处理无法显示和输出的容易乱码的二进制文件了。

    base64模块基本使用:

    import base64

    >>>base64.b64encode(b'binary\x00string')#将二进制数据进行编码

    >>>base64.b64decode(b'YmluYXJ5AHN0cmluZw==')#解码

    编码后的样子:YmluYXJ5AHN0cmluZw==

    问题又来了,base64虽然能将二进制数据变得可见可处理,可是在编码后有时候会有+和/,这编码后的字符串无法在url参数中得到应用(产生原因),所以产生了url safe的base64编码:


    >>> base64.b64encode(b'i\xb7\x1d\xfb\xef\xff')

    b'abcd++//

    >>> base64.urlsafe_b64encode(b'i\xb7\x1d\xfb\xef\xff')

    b'abcd--__'

    >>> base64.urlsafe_b64decode('abcd--__')

    b'i\xb7\x1d\xfb\xef\xff'

    将+,/转换成了-,__,从而解决了上述问题。

    往往base64出现不足3字节,会出现=来表示补位个数,但是=的出现在url,cookies中也会造成歧义,所以很多时候base64编码后会把=去掉

    

你可能感兴趣的:(base64(二进制编解码)-常见内置模块)