Python内置模块base64的理解

1、 base64用途

base64模块提供将一种二进制转化为另一种二进制的方法,后者可全部由64个字符表示。举个例子:

>>> '中文'.encode('utf-8')    #将'中文'这两个字符按照utf-8编码方式进行编码
b'\xe4\xb8\xad\xe6\x96\x87'
>>> base64.b64encode('中文'.encode('utf-8'))  #将'中文'这两个字符的二进制转化为base64编码的二进制
b'5Lit5paH'

'中文’这两个字符按照’utf-8’编码,其二进制内容为b'\xe4\xb8\xad\xe6\x96\x87',该二进制通过base64再次编码,获得一个新的二进制b'5Lit5paH',两个二进制的区别在于后者可全部用字符进行表示,这就是base64的作用。b'5Lit5paH'可通过base64解码还原成b'\xe4\xb8\xad\xe6\x96\x87',然后通过utf-8编码规则解码,即可得到’中文’这两个字符。
base64中64是指二进制可以通过b'字符串'表示,其中字符串可以有64个字符任意组合而成,其中64个字符和数值对应的如下图所示。64=26 所以base64采用6个编码位进行编码。
Python内置模块base64的理解_第1张图片

2、编码过程

base64编码时,每3个字节分为一组,每组共24个位,将24个位划分为4份,每份6个位,通过6个编码位对应的值(0~63),查找上表即得其对应的字符,然后得到新的二进制编码。注意:若base64编码的字节个数不是3的整数倍,则末尾补充\x00,再在编码的末尾加上1个或2个=号,表示补了多少个字节\x00,解码的时候,会自动去掉。

3、举例说明

我们将b'\xe4\xb8\xad8'4字节进行base64编码来进行说明:
(1)b'\xe4\xb8\xad8'对应的0和1编码为:11100100 10111000 10101101 00111000 ,一共4个字节,不是3的整数倍,补足两个\x00字节,即11100100 10111000 10101101 00111000 00000000 00000000;
(2)将以上分为两组,每组24位,然后每组再分成4份,每份6位:
第一组:111001 001011 100010 101101 →57 11 34 45→查上表得:5 L i t
第二组:001110 000000 000000 000000→14 0 0 0→查上表得:O A A A
(3)由于补足了两个\x00字节,编码末尾为两个=(实际上是替换后两位AA),所以编码结果为b'5LitOA=='

>>>import base64
>>>base64.b64encode(b'\xe4\xb8\xad8')
b'5LitOA=='

你可能感兴趣的:(python,程序人生)