蘭雅sRGB 个人笔记 https://262235.xyz
提供编程和电脑应用视频教程,工具和源代码
C, C++, Python Programming, Source Code, Video

旧Hexo博客 | Github | IP定位WebAPI | Docker Hub
编程中文文档 | 网盘分享 | 中文Linux命令

Python3 字符串base64编解码笔记

b64-fb.png

  • 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,详细原理如下:

1.PNG
在此例中,Base64算法将3个字节编码为4个字符。 转码一次24bit:3x8 =4x6 ; 内存1个字节占8位

Base64索引表

2.PNG

如果要编码的字节数不能被3整除,最后会多出1个或2个字节,那么可以使用下面的方法进行处理:先使用0字节值在末尾补足,使其能够被3整除,然后再进行Base64的编码。在编码后的Base64文本后加上一个或两个=号,代表补足的字节数。也就是说,当最后剩余两个八位(待补足)字节(2个byte)时,最后一个6位的Base64字节块有四位是0值,最后附加上两个等号;如果最后剩余一个八位(待补足)字节(1个byte)时,最后一个6位的base字节块有两位是0值,最后附加一个等号。 参考下表:
3.PNG

本原创文章自由转载,转载请注明本博来源及网址 | 当前页面:蘭雅sRGB 个人笔记 » Python3 字符串base64编解码笔记