运行结果如下:
序列化字典: b'\x80\x03}q\x00(X\x04\x00\x00\x00codeq\x01X\x03\x00\x00\x00200q\x02X\x04\x00\x00\x00dataq\x03]q\x04}q\x05(X\x0b\x00\x00\x00create_timeq\x06X\n\x00\x00\x002\xe5\xb0\x8f\xe6\x97\xb6\xe5\x89\x8dq\x07X\x02\x00\x00\x00idq\x08K\x03X\x05\x00\x00\x00titleq\tX3\x00\x00\x00\xe5\xaf\xb9\xe8\xaf\x9d\xe8\x91\xa3\xe6\x98\x8e\xe7\x8f\xa0\xef\xbc\x9a\xe8\xbf\x99\xe4\xb8\xaa\xe6\x97\xb6\xe4\xbb\xa3\xe8\xa6\x81\xe5\x80\xa1\xe5\xaf\xbc\xe5\x88\xa9\xe4\xbb\x96\xe6\x80\x9d\xe6\x83\xb3q\nX\x03\x00\x00\x00urlq\x0bX2\x00\x00\x00https://www.thepaper.cn/newsDetail_forward_3131849q\x0cuaX\x03\x00\x00\x00msgq\rX\x0c\x00\x00\x00\xe8\xaf\xb7\xe6\xb1\x82\xe6\x88\x90\xe5\x8a\x9fq\x0eu.' 反序列化字典: {'code': '200', 'data': [{'create_time': '2小时前', 'id': 3, 'title': '对话董明珠:这个时代要倡导利他思想', 'url': 'https://www.thepaper.cn/newsDetail_forward_3131849'}], 'msg': '请求成功'} 从文件中序列化: {'code': '200', 'data': [{'create_time': '2小时前', 'id': 3, 'title': '对话董明珠:这个时代要倡导利他思想', 'url': 'https://www.thepaper.cn/newsDetail_forward_3131849'}], 'msg': '请求成功'}
打开序列化后的文件:test.pkl,内容如下:
3、hashlib模块
Python中内置了一个字符加密模块:
hashlib
,整合了md5和sha模块,支持下面这些加密算法:
__always_supported = ('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'blake2b', 'blake2s', 'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512', 'shake_128', 'shake_256')
可以通过下述属性查看hash对象的相关信息:
- name:查看当前hash对象的加密算法
- digest_size:hash密文占多少个字节
- block_size:hash数据库的大小
使用代码示例:
import hashlib origin_str = 'Hello Python!' # md5加密 h_md5 = hashlib.md5() h_md5.update(origin_str.encode('utf8')) digest_str = h_md5.hexdigest() print("md5加密: %s" % digest_str) # 添加自定义key加密 h_md5_key = hashlib.md5('CoderPig'.encode('utf8')) h_md5.update(origin_str.encode('utf8')) digest_str = h_md5.hexdigest() print("带key md5加密后: %s" % digest_str) # sha1加密 h_sha1 = hashlib.sha1() h_sha1.update(origin_str.encode('utf8')) digest_str = h_sha1.hexdigest() print("sha1加密后: %s" % digest_str)
运行结果如下:
md5加密: c0a5ef1508044415ffd76c57ebd51b19 带key md5加密后: 27fd294cd16301d09a5e94840763c43b sha1加密后: 2aac9ef117b5f1fd0be0380bf1e4e10dc62bfbf7
注意:SHA-1与MD5都是摘要算法,且为不可逆算法!!!另外,如果需要加密的字符串过长的话,可以使用同一个hash对象分多次加密,即多次update()。
4、base64模块
Python中提供的把二进制字节流编码为64个字符
的模块,有一点要注意:
输入的base64编码字符串必须符合base64的padding规则:当原数据长度不是3的整数倍时:剩下2个输入数据,编码结果后加一个'=';剩下1个输入数据,编码结果加2个'='。以确保资料还原的正确性,否则会报:binascii.Error: Incorrect padding 的错误!!!
编解码的代码示例如下:
import base64 test_str = "一段等待Base64编码的字符串" if __name__ == '__main__': # 编码(转换为二进制才可以进行编码) encode_str = base64.b64encode(test_str.encode('utf-8')) print("编码后:", encode_str) # 解码(解码后为二进制,同样要转换下) decode_str = base64.b64decode(encode_str) print("解码后:", decode_str.decode('utf-8'))
运行结果如下:
编码后: b'5LiA5q61562J5b6FQmFzZTY057yW56CB55qE5a2X56ym5Liy' 解码后: 一段等待Base64编码的字符串