base64编码原理以及python中的base64模块

平常工作中,大家对base64肯定不陌生。

但作为程序员,只会对其使用还是远远不够的,本着知其然知其所以然,看了下base64的编码原理,在此做个笔记。

首先,说一下base64的用途,base64编码是将二进制字节流编码为可打印的64个字符。有些网络传输并不支持二进制编码的字节流的传输,若要解决此问题,就可以用base64编码。另外,base64可以作为简单的加密工具。

原理:

众所周知,传统的一个字节占8位,base64是将原先的二进制字节流以6位为分割,然后在经过base64字符编码对照表,编码为可打印的字符串。

base64字符编码对照表:


举个例子:

字符 ‘z’,二进制为

>>> bin(ord('z'))
'0b1111010'
即:0111 1010

base64编码,以6位分割

第一个字符为:0001 1110,10进制为30,对应base64字符编码对照表:‘e’

第二个字符为:0010 0000,10进制为32,对应base64字符编码对照表:‘g’

base64编码的一个字节6位,传统的一个字节8位,最小公倍数为24。那么base64编码最小单位即为24/6=4个字符

由于‘z’后面bit位都是0,base64约定以‘=’代替

上述还可以写为:

以24位,8位分割表示:

01111010     00000000     00000000

以24位,6位分割表示:

011110    100000    000000    000000

6位如何以8位形式表示,在前面补0,即:

0001 1110    0010 0000    0000 0000    0000 0000

得到上述结果

因此,‘z’经过base64编码得到:‘eg==’

用python验证一下:

>>> base64.b64encode("z")
'eg=='

上述即为base64编码原理


在python中,base64有标准模块,我们可以直接使用

import base64

使用方式:

编码

>>> base64.b64encode("z")
'eg=='

解码

>>> base64.b64decode('eg==')
'z'


模块中我们可以看到,除了b64encode,还有b32encode,b16encode,这些编码原理都是相同的。

b32取的是5位分割,5和8的最小公倍数为40,那么b32的最小单位为40/5=8个字符,缺失以‘=’补齐

b16去的是4位分割,4和8的最小公倍数为8,那么b16的最小单位为8/4=2个字符


结束!!!



展开阅读全文

没有更多推荐了,返回首页