【Python标准库】base64模块
文章目录
- 简介
- base64
- base85
简介
在binacii
模块中提供了base64的编解码方法,而base64
模块,除了base64
之外,还提供了Base16
, Base32
, Base85
的数据编码方法。
这些不同的BaseXX
,区别在于利用字符的数目,比如Base16
代表使用了16个字符。实际上,除了base64
提供的这几种编码方式之外,还有base62, base91, base92
等等,这些编码方案用到的字符如下表
编码 | 可用字符 | 编码函数 | 解码函数 |
---|---|---|---|
Base16
|
[0-9A-F]
|
b16encode
|
b16encode
|
Base32
|
[A-Z2-7]
|
b32encode
|
b32decode
|
Base62 |
[A-Za-z0-9]
|
- | - |
Base64
|
[A-Za-z0-9+/]
|
b64encode
|
b64decode
|
Base85
|
ASCII33-118 |
a85encode
|
a85encode
|
base64
下面先用base64
举个例子验证一下
import base64
test = b'tinycold'
print([hex(t) for t in test]) #打印test对应的二进制值
# ['0x74', '0x69', '0x6e', '0x79', '0x63', '0x6f', '0x6c', '0x64']
b64 = base64.b64decode(test)
print(b64)
# b'\xb6)\xf2r\x89]'
print([hex(i) for i in b64])
# ['0xb6', '0x29', '0xf2', '0x72', '0x89', '0x5d']
其中t
在ASCII中是0x74
,即test data
是ASCII编码的。尽管ASCII中每个字符只需7位,但在传输时必须占用1个字节,也就是8位。tinycold
一共需要8个字节。
经过base64
解码后,每个字符占用6位,每4个字符24位,需要3个字节。所以,8个字符最后得到了6个字节。
也就是说,用ASCII需要用8个字节表示的数据,base64
只需6个字节就搞定了,这相当于网速提高一半,非常不得了。
考虑到base64
使用的广泛性,故而在base64
模块中,为其提供了不同的标准,以urlsafe_b64encode
, urlsafe_b64decode
为编码、解码函数的base64
,采用-_
字符替代了原来的+\
字符,从而避免产生类似超链接或者文件路径的编码,提高安全性。
base85
base64
的问题是,可以编码的字符只有64个,连个标点符号都没有
>>> b64 = base64.b64decode(b"tiny!cold")
>>> base64.b64encode(b64)
b'tinycold'
相比之下,base85
用了85个字符,表现力大幅度提升,
b85 = base64.b64decode(b"tiny!cold")
print([hex(i) for i in b85])
# ['0xac', '0xc2', '0x4d', '0xd6', '0x78', '0x15', '0x78']
base64.b85encode(b85)
# b'tiny!cold'
base85
编码被广泛应用在Adobe的PostScript和Portable Document Format文件格式中,所以base85
还有另一组编解码函数,提供了adobe
参数,当其设为True
时,控制编码后的字节序列是否要加上<~
和~>
,从而满足adobe的标准。
其详细定义如下
base64.a85encode(b, foldspaces=False, wrapcol=0, pad=False, adobe=False)
base64.a85decode(b, foldspaces=False, adobe=False, ignorechars=b' \t\n\r\x0b')
除了adobe
之外,其他参数含义如下
foldspaces
为True时,使用特殊的短序列 ‘y’ 代替 ‘btoa’ 提供的 4 个连续空格 (ASCII 0x20)pad
控制在编码之前输入是否填充为4的倍数wrapcol
控制输出是否包含换行符b'\n'
,若该值非零, 则每一行只有该值所限制的字符长度。ignorechars
顾名思义,表示要从输入中忽略的字符。
【Python标准库】base64模块相关推荐
- Python标准库queue模块原理浅析
Python标准库queue模块原理浅析 本文环境python3.5.2 queue模块的实现思路 作为一个线程安全的队列模块,该模块提供了线程安全的一个队列,该队列底层的实现基于Python线程th ...
- Python标准库threading模块Condition原理浅析
Python标准库threading模块Condition原理浅析 本文环境python3.5.2 threading模块Condition的实现思路 在Python的多线程实现过程中,在Linux平 ...
- Python标准库asyncio模块基本原理浅析
Python标准库asyncio模块基本原理浅析 本文环境python3.7.0 asyncio模块的实现思路 当前编程语言都开始在语言层面上,开始简化对异步程序的编程过程,其中Python中也开始了 ...
- Python标准库base64用法简介
base64模块提供了大量函数用来把二进制数据编码为可打印的ASCII字符,以及将其解码为二进制数据.提供了RFC3548中Base16.Base32.Base64以及事实标准Ascii85和Base ...
- Python 标准库 functools 模块详解
functools 官方文档:https://docs.python.org/zh-cn/3/library/functools.html Python 标准模块 --- functools:http ...
- python的csv标准库,Python标准库: csv模块——CSV文件的读写
CSV简介 CSV(Comma Separated Values,逗号分隔值)也称字符分隔值,因为分隔符可以不是逗号,是一种常用的文本格式,用以存储表格数据,包括数字或者字符.很多程序在处理数据时都会 ...
- Python标准库——collections模块的Counter类
更多16 最近在看一本名叫<Python Algorithm: Mastering Basic Algorithms in the Python Language>的书,刚好看到提到这个C ...
- Python标准库collections模块的Counter类
collections模块 collections模块自Python 2.4版本开始被引入,包含了dict.set.list.tuple以外的一些特殊的容器类型,分别是: OrderedDict类:排 ...
- Python 标准库 - Pprint 模块 - 用于打印 Python 数据结构
使用 pprint 模块 pprint 模块( pretty printer ) 用于打印 Python 数据结构. 当你在命令行下打印特定数据结构时你会发现它很有用(输出格式比较整齐, 便于阅读). ...
- Python标准库--time模块的详解
time模块 - - -时间获取和转换 在我们学习time模块之前需要对以下的概念进行了解: 时间戳:时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08 ...
最新文章
- SpringMVC工作环境搭建 配置文件
- 热潮下的冷思考,人工智能即将改变的三大领域
- linux centos 查找命令 属于哪个安装包 所属软件包
- 【离散数学】浅析小项与主析取范式和大项与主合取范式
- Ueditor使用以及遇到的问题
- 发那科机器人编程软件fanuc roboguide授权补丁_发那科Robot | Line Tracking功能
- 分布式mysql 不支持存储过程_分布式数据库VoltDB对存储过程的支持
- pycharm下防止鼠标拖拽代码字符
- 基于 libdmtx和zxing的DM二维码识别总结
- 生物医学基础--人体阻抗模型
- 高中学习计算机技术,关于高中生学习计算机信息技术的思考
- 如何修改电脑的ip地址
- 360度环绕式全景 微软photosynth震撼体验
- 小米4android8.0root,小米8青春版获取root权限的教程
- jQuery——淘宝购物车结算页面demo
- error in opening zip file
- PyTorch基础:数据处理(数据加载、GPU加速)
- 为什么ASFR下载的实时流媒体无法播放?
- 如何系统的学习服务器相关知识?
- SAP中SD交货与WM下架功能的集成应用