- Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,包括MIME的电子邮件及XML的一些复杂数据。
- Base64 应用举例:源码bitfont.py把2个字体用到的4个文件和1张PNG图片内嵌到源码中;还有Adobe 的文件格式,一般把jpg预览图编码保存在文档中的XML数据里
Python3 中 Base64
数据编码功能:
base64.b64encode
(s, altchars=None)
对 bytes-like object(字节类对象) s 进行 Base64 编码,并返回编码后的 bytes。base64.b64decode
(s, altchars=None, validate=False)
解码 Base64 编码过的 bytes-like object 或 ASCII 字符串 s 并返回解码过的 bytes。
所以下面的代码,先把 utf-8
的字符串先转换成 bytes
类型,再使用 Base64
库进行编码和解码
import base64
s = "www.python.org"
b = s.encode("utf-8") # s = b.decode('utf-8')
b64 = base64.b64encode(b)
print(s, b, b64)
# www.python.org b'www.python.org' b'd3d3LnB5dGhvbi5vcmc='
b64 = (
b"YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNE"
b"RUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0\nNT"
b"Y3ODkhQCMwXiYqKCk7Ojw+LC4gW117fQ==\n"
) # 多行字符串使用小括号方法
b = base64.b64decode(b64)
s = b.decode("utf-8")
print(b64)
print(b)
print(s)
# abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#0^&*();:<>,. []{}
编码 Man
的结果为 TWFu
,详细原理如下:
在此例中,Base64算法将3个字节编码为4个字符。 转码一次24bit:3x8 =4x6 ; 内存1个字节占8位
Base64索引表
如果要编码的字节数不能被3整除,最后会多出1个或2个字节,那么可以使用下面的方法进行处理:先使用0字节值在末尾补足,使其能够被3整除,然后再进行Base64的编码。在编码后的Base64文本后加上一个或两个=号,代表补足的字节数。也就是说,当最后剩余两个八位(待补足)字节(2个byte)时,最后一个6位的Base64字节块有四位是0值,最后附加上两个等号;如果最后剩余一个八位(待补足)字节(1个byte)时,最后一个6位的base字节块有两位是0值,最后附加一个等号。 参考下表: