base64是一种比较常见的二进制编码方法
import base64
# 编码:
s1 = b'hello world' #b表示字节串
print(base64.b64encode(s1))
# 或者 s1 = 'hello world'
# print(base64.b64encode(s1.encode('utf-8')))
# 输出:b'aGVsbG8gd29ybGQ='
# 解码:
s2 = b'aGVsbG8gd29ybGQ='
print(base64.b64decode(s2))
# 输出:b'hello world'
编码原理:
一个包含64个字符的数组
['A','B',.....,'a','b','c',......,'0','1',,.....'+','/']
26 + 26 + 10 + 2 = 64个字符
对二进制数据进行处理,每三个字节一组,一组就是3*8 = 24bit,base会把24个字节分为6组,4个字节,得到4个数字作为索引,然后查表,获得相应的4个字符,就是编码后的字符串。
就是3个字节对应编码后的4个字节。
作用:
使用于小段内容的编码,比如数字证书签名,cookie,网页中传输的少量二进制数据
注意:base64是一种通过查表的编码方法,不能用于加密
如果要编码的二进制不是3的倍数,怎么办?
答:base用(=)在末尾补足,在编码的末尾加上1个或者2个等号表示差了多少个字节,就是不够3的倍数,差几个,就补几个,解码时会自动去掉。
# 正好是3的倍数
s1 = b"hello wor"
print(base64.b64encode(s1))
#输出:b'aGVsbG8gd29y'
# 如果字节不够3的倍数,少一个字节就为3的倍数,补足一个=
s2 = b"hello world" # 3个字节一组
print(base64.b64encode(s2))
# 输出:b'aGVsbG8gd29ybGQ=' #4个字节一组,不够的用=号补全
# 直观一点
s3 = b"hello wor\x00\x00\x00" # \x00代表二进制0的意思
print(base64.b64encode(s3))
输出:b'aGVsbG8gd29yAAAA'
# \x00是0对应的查表就是A,3个字节0,对应4个字节A,少一个\x00对应的编码会补足一个=
网友评论