Python中Pickle模块和base64模块的使用解析
作者:生有涯,知无涯
1.pickle模块
pickle模块是python的标准模块,提供了对于python数据的序列化操作,可以将数据转换为bytes类型,其序列化速度比json模块要高。
- pickle.dumps()将python数据序列化为bytes类型
- pickle.loads()将bytes类型数据反序列化为python的数据类型
import pickle d = {'1': {'count': 10, 'selected': True}, '2': {'count': 20, 'selected': False}} s = pickle.dumps(d) print(s) # b'\x80\x03}q\x00(X\x01\x00\x00\x001q\x01}q\x02(X\x05\x00\x00\x00countq\x03K\nX\x08\x00\x00\x00selectedq\x04\x88uX\x01\x00\x00\x002q\x05}q\x06(h\x03K\x14h\x04\x89uu.' print(pickle.loads(s)) # {'1': {'count': 10, 'selected': True}, '2': {'count': 20, 'selected': False}}
2.base64模块
Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2^6=64,所以每6个比特为一个单元,对应某个可打印字符。3个字节有24个比特,对应于4个Base64单元,即3个字节可由4个可打印字符来表示。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。
Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,包括MIME的电子邮件及XML的一些复杂数据。
1.标准base64只有64个字符(英文大小写、数字和+、/)以及用作后缀等号;
2.base64是把3个字节变成4个可打印字符,所以base64编码后的字符串一定能被4整除(不算用作后缀的等号);
3.等号一定用作后缀,且数目一定是0个、1个或2个。这是因为如果原文长度不能被3整除,base64要在后面添加\0凑齐3n位。为了正确还原,添加了几个\0就加上几个等号。显然添加等号的数目只能是0、1或2;
4.严格来说base64不能算是一种加密,只能说是编码转换。使用base64的初衷。是为了方便把含有不可见字符串的信息用可见字符串表示出来,以便复制粘贴;
python标准库中提供了base64模块,用来进行转换
- base64.b64encode()将bytes类型数据进行base64编码,返回编码后的bytes类型
- base64.b64decode()将base64编码的bytes类型进行解码,返回解码后的bytes类型
import base64 import pickle d = {'1': {'count': 10, 'selected': True}, '2': {'count': 20, 'selected': False}} s = pickle.dumps(d) print(s) # b'\x80\x03}q\x00(X\x01\x00\x00\x001q\x01}q\x02(X\x05\x00\x00\x00countq\x03K\nX\x08\x00\x00\x00selectedq\x04\x88uX\x01\x00\x00\x002q\x05}q\x06(h\x03K\x14h\x04\x89uu.' b = base64.b64encode(s) # bytes类型数据进行base64编码,返回编码后的bytes类型 print(b) # b'gAN9cQAoWAEAAAAxcQF9cQIoWAUAAABjb3VudHEDSwpYCAAAAHNlbGVjdGVkcQSIdVgBAAAAMnEFfXEGKGgDSxRoBIl1dS4=' print(base64.b64decode(b)) # base64编码的bytes类型进行解码,返回解码后的bytes类型 # b'\x80\x03}q\x00(X\x01\x00\x00\x001q\x01}q\x02(X\x05\x00\x00\x00countq\x03K\nX\x08\x00\x00\x00selectedq\x04\x88uX\x01\x00\x00\x002q\x05}q\x06(h\x03K\x14h\x04\x89uu.'
Base64是一种通过查表的编码方法,不能用于加密,即使使用自定义的编码表也不行。
Base64适用于小段内容的编码,比如数字证书签名、Cookie的内容等。
一句话讲:Base64是一种任意二进制到文本字符串的编码方法,常用于在URL、Cookie、网页中传输少量二进制数据。
3.应用场景
存一些非敏感数据到cookie里面。例如: 网站未登录用户选购商品到购物车,可以将选的商品保存到cookie,用户登陆以后从cookie取出数据进行合并。步骤如下:
商品的数据字典存到cookie字符串,假设goods_dict是选购的商品数据
cookie_str = base64.b64.encode(pickle.dumps(goods_dict)).decode()
从cookie的字符串取出用户选购的商品数据字典。
goods_dict = pickle.loads(base64.b64decode(cookie_str.encode()))
到此这篇关于Python中Pickle模块和base64模块的使用解析的文章就介绍到这了,更多相关Pickle模块和base64模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!