【python】字节转换 base64 encode decode pickle

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)
>>> 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.'
>>> pickle.loads(s)
{'1': {'count': 10, 'selected': True}, '2': {'count': 20, 'selected': False}}
 

base64模块的使用

Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2^6=64,所以每6个比特为一个单元,对应某个可打印字符。3个字节有24个比特,对应于4个Base64单元,即3个字节可由4个可打印字符来表示。在Base64中的可打印字符包括字母A-Za-z、数字0-9,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。

Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,包括MIME的电子邮件及XML的一些复杂数据。

python标准库中提供了base64模块,用来进行转换

  • base64.b64encode() 将bytes类型数据进行base64编码,返回编码后的bytes类型
  • base64.b64deocde() 将base64编码的bytes类型进行解码,返回解码后的bytes类型
>>> import base64
>>> 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)
>>> b
b'gAN9cQAoWAEAAAAxcQF9cQIoWAUAAABjb3VudHEDSwpYCAAAAHNlbGVjdGVkcQSIdVgBAAAAMnEFfXEGKGgDSxRoBIl1dS4='
>>> base64.b64decode(b)
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.'

 

# cart_str ---> 本地cookie获取的值
cart_str = request.COOKIES.get("cart")
print("0")
print(cart_str)
print("1")
print(cart_str.encode())
print("2")
print(base64.b64decode(cart_str.encode()))
cart_dict = pickle.loads(base64.b64decode(cart_str.encode()))
print("3")
print(cart_dict)
 
 
输出:
0
gAN9cQBLCH1xAShYBQAAAGNvdW50cQJLAlgIAAAAc2VsZWN0ZWRxA4h1cy4=
1
b'gAN9cQBLCH1xAShYBQAAAGNvdW50cQJLAlgIAAAAc2VsZWN0ZWRxA4h1cy4='
2
b'\x80\x03}q\x00K\x08}q\x01(X\x05\x00\x00\x00countq\x02K\x02X\x08\x00\x00\x00selectedq\x03\x88us.'
3
{8: {'count': 2, 'selected': True}}

 

上一篇:Ubuntu 18.04.5安装pwntools


下一篇:微软紧急发布SMBv3协议漏洞-CVE-2020-0796验证、攻击演示、修复和扫描源代码