base64编解码
2018-09-07 本文已影响0人
陆_志东
base64是一种用64个字符进行组合来表示任意二进制数据的方法
原理:
base64会将3
个字节作为一组
,不够三个字节的会用\x00
来补齐三个字节,并使用=
来表示补了几个
字节(一个=
号表示补了一个字节,两个=
表示补了两个字节),然后将这3
个字节的数据编码成4
个字节.所以使用base64
编码后,数据的长度会增加33.33333%
base64编码的64个字符:
['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']
由上面的数组可以看出编码后可能会出现+和/
所以不能使用b64encode
应用于网址编码
应该使用urlsafe_b64encode
. urlsafe_b64encode
将+
变成了-
;将/
变成了_
注意:base64和hashlib一样不接收unicode字符,只接受字节(字节数组)
代码示例:
import base64
str1 = "哈哈"
print(len(str1))
>>2
normal_bytes = str1.encode("utf-8")
print(normal_bytes)
>>b'\xe5\x93\x88\xe5\x93\x88'
print(len(normal_bytes))
>>6
base64_bytes = base64.b64encode(str1.encode("utf-8"))
print(base64_bytes)
>>b'5ZOI5ZOI'
print(len(base64_bytes))
>>8
由上面看出base64编码后的数据也是二进制数据