平常工作中,大家对base64肯定不陌生。
但作为程序员,只会对其使用还是远远不够的,本着知其然知其所以然,看了下base64的编码原理,在此做个笔记。
首先,说一下base64的用途,base64编码是将二进制字节流编码为可打印的64个字符。有些网络传输并不支持二进制编码的字节流的传输,若要解决此问题,就可以用base64编码。另外,base64可以作为简单的加密工具。
原理:
众所周知,传统的一个字节占8位,base64是将原先的二进制字节流以6位为分割,然后在经过base64字符编码对照表,编码为可打印的字符串。
base64字符编码对照表:
文章图片
举个例子:
字符 ‘z’,二进制为
>>> bin(ord('z'))
'0b1111010'
即:0111 1010 【base64编码原理以及python中的base64模块】
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位分割表示:
011110100000000000000000
以24位,6位分割表示:
011110100000000000000000
6位如何以8位形式表示,在前面补0,即:
0001 11100010 00000000 00000000 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个字符
结束!!!
推荐阅读
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- Python专栏|数据分析的常规流程
- Python|Win10下 Python开发环境搭建(PyCharm + Anaconda) && 环境变量配置 && 常用工具安装配置
- Python绘制小红花
- Pytorch学习|sklearn-SVM 模型保存、交叉验证与网格搜索
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- python|8. 文件系统——文件的删除、移动、复制过程以及链接文件
- 爬虫|若想拿下爬虫大单,怎能不会逆向爬虫,价值过万的逆向爬虫教程限时分享
- 分布式|《Python3网络爬虫开发实战(第二版)》内容介绍
- java|微软认真聆听了开源 .NET 开发社区的炮轰( 通过CLI 支持 Hot Reload 功能)