文章目录

  • 简介
  • 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模块相关推荐

  1. Python标准库queue模块原理浅析

    Python标准库queue模块原理浅析 本文环境python3.5.2 queue模块的实现思路 作为一个线程安全的队列模块,该模块提供了线程安全的一个队列,该队列底层的实现基于Python线程th ...

  2. Python标准库threading模块Condition原理浅析

    Python标准库threading模块Condition原理浅析 本文环境python3.5.2 threading模块Condition的实现思路 在Python的多线程实现过程中,在Linux平 ...

  3. Python标准库asyncio模块基本原理浅析

    Python标准库asyncio模块基本原理浅析 本文环境python3.7.0 asyncio模块的实现思路 当前编程语言都开始在语言层面上,开始简化对异步程序的编程过程,其中Python中也开始了 ...

  4. Python标准库base64用法简介

    base64模块提供了大量函数用来把二进制数据编码为可打印的ASCII字符,以及将其解码为二进制数据.提供了RFC3548中Base16.Base32.Base64以及事实标准Ascii85和Base ...

  5. Python 标准库 functools 模块详解

    functools 官方文档:https://docs.python.org/zh-cn/3/library/functools.html Python 标准模块 --- functools:http ...

  6. python的csv标准库,Python标准库: csv模块——CSV文件的读写

    CSV简介 CSV(Comma Separated Values,逗号分隔值)也称字符分隔值,因为分隔符可以不是逗号,是一种常用的文本格式,用以存储表格数据,包括数字或者字符.很多程序在处理数据时都会 ...

  7. Python标准库——collections模块的Counter类

    更多16 最近在看一本名叫<Python Algorithm: Mastering Basic Algorithms in the Python Language>的书,刚好看到提到这个C ...

  8. Python标准库collections模块的Counter类

    collections模块 collections模块自Python 2.4版本开始被引入,包含了dict.set.list.tuple以外的一些特殊的容器类型,分别是: OrderedDict类:排 ...

  9. Python 标准库 - Pprint 模块 - 用于打印 Python 数据结构

    使用 pprint 模块 pprint 模块( pretty printer ) 用于打印 Python 数据结构. 当你在命令行下打印特定数据结构时你会发现它很有用(输出格式比较整齐, 便于阅读). ...

  10. Python标准库--time模块的详解

    time模块 - - -时间获取和转换 在我们学习time模块之前需要对以下的概念进行了解: 时间戳:时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08 ...

最新文章

  1. SpringMVC工作环境搭建 配置文件
  2. 热潮下的冷思考,人工智能即将改变的三大领域
  3. linux centos 查找命令 属于哪个安装包 所属软件包
  4. 【离散数学】浅析小项与主析取范式和大项与主合取范式
  5. Ueditor使用以及遇到的问题
  6. 发那科机器人编程软件fanuc roboguide授权补丁_发那科Robot | Line Tracking功能
  7. 分布式mysql 不支持存储过程_分布式数据库VoltDB对存储过程的支持
  8. pycharm下防止鼠标拖拽代码字符
  9. 基于 libdmtx和zxing的DM二维码识别总结
  10. 生物医学基础--人体阻抗模型
  11. 高中学习计算机技术,关于高中生学习计算机信息技术的思考
  12. 如何修改电脑的ip地址
  13. 360度环绕式全景 微软photosynth震撼体验
  14. 小米4android8.0root,小米8青春版获取root权限的教程
  15. jQuery——淘宝购物车结算页面demo
  16. error in opening zip file
  17. PyTorch基础:数据处理(数据加载、GPU加速)
  18. 为什么ASFR下载的实时流媒体无法播放?
  19. 如何系统的学习服务器相关知识?
  20. SAP中SD交货与WM下架功能的集成应用

热门文章

  1. day11 反转字符串||反转字符串2
  2. 屏下指纹技术实现方案与原理
  3. JAVA---冒泡排序
  4. python中的reshape函数
  5. 本地代理ARP(Local Proxy ARP )
  6. 详解MYSQL数据库密码的加密方式及破解方法(1)
  7. 高通MDM9628芯片数据参考
  8. 电脑开机为什么会出现黑屏
  9. AI大模型加持,生成式搜索来了!
  10. Flutter 解决App登录页面软键盘遮挡住登录按钮或顶起底部控件的问题