import base64
'''
概述:用记事本打开图片等文件,看到一坨乱码,因为二进制文件包含很多无法显示的内容。所以想让记事本能处理二进制数据,就需要将二进制字符串转换。base64是一种比较常见的二进制编码方法
编码原理:
一个包含64个字符的数组
['A', 'B', ……, 'a', 'b', ……, '0', '1', ……, '+', '/']
对二进制数据进行处理,每个三个字节一组,一组就是3x8=24bit,划为4组,每组正好6bit
得到4个数字作为索引,然后查表,获得相应的4个字符,就是编码后的字符串
作用:
适用于小段内容的编码,比如数字证书签名,cookie,网页中传输的少量二进制数据
注意:base64是一种通过查表的编码方法,不能用于加密,即使修改了字符对照表页不行。
'''
#编码
s1 = b"sunck is a good ma"
print(base64.b64encode(s1))
#解码
s2 = b"c3VuY2sgaXMgYSBnb29kIG1h"
print(base64.b64decode(s2))
#如果要编码的二进制不是3的倍数,怎么办?
#答:base用\x00字节在末尾补足,在编码的末尾加上1个或2个等号表示补了多少个字节,解码时会自动去掉
s3 = b"sunck is a good man"
print(base64.b64encode(s3))
# 由于标准base64编码后可能出现字符+和/,在URL中就不能直接作为参数
# 提供urlsafe_b64encode编码,保证url的安全,将+和/替换成-和_,提供urlsafe_b64decode进行url安全解码
s4 = b"sunck is a good m~"
print(base64.b64encode(s4))
print(base64.urlsafe_b64encode(s4))
s5 = b"c3VuY2sgaXMgYSBnb29kIG1-"
print(base64.urlsafe_b64decode(s5))
#由于=字符也可能出现在base64编码中,但是=在url、cookie里面会造成歧义,所以很多base64编码后会把=去掉
s6 = b"abcd"
s8 = base64.b64encode(s6)
print(s8)
# b"abcd" --> b'YWJjZA=='
# b"abcd" --> b'YWJjZA'
s7 = b'YWJjZA=='
print(base64.b64decode(s7))
#可以自定义编码对照表列表中64个字符的排序,这样可以自定义编码,但是通常情况下没有任何必要