今天刚好测试数据加密功能,使用的是 pyDes 模块,至于加密逻辑的话可以自行百度,其他博主有写说明!
Q:此次主要记录如何将Bytes字符转为Str字符?
A:调用 .decode('raw_unicode_escape') 编码 或者 .encode('raw_unicode_escape') 解码
import pyDes, binascii
class DES:
# 初始化key
def __init__(self, key):
self.key = key.encode("utf8")
def des_encrypt(self, s):
"""
DES 加密
:param s: 原始字符串
:return: 加密后字符串,16进制
"""
secret_key = self.key
k = pyDes.des(secret_key, pyDes.triple_des, pad=None, padmode=pyDes.PAD_PKCS5)
en = k.encrypt(s.encode("utf8"), padmode=pyDes.PAD_PKCS5)
return binascii.b2a_hex(en)
def des_descrypt(self, s):
"""
DES 解密
:param s: 加密后的字符串,16进制
:return: 解密后的字符串
"""
secret_key = self.key
k = pyDes.des(secret_key, pyDes.triple_des, pad=None, padmode=pyDes.PAD_PKCS5)
de = k.decrypt(binascii.a2b_hex(s), padmode=pyDes.PAD_PKCS5)
return de
des = DES('12345678') # 秘钥一定是8个字节,多于少于都会报错
a= {'code':0,"msg":"Success","data":[{'id':1,"IP":"192.168.1.12"}]} # 待加密的数据
print(des.des_encrypt(str(a))) #执行加密方法,将源数据转为Str类型
>>>b'0cc275c6d2c2ace111deec10e51e84bd1239b27db608a1304e781a605bb4b2a3d31ebd5d947d7f947eee12328c6270d1b583d34797eb941772661c421d782fc59992ca6f4f01d738feb959b7d4642fcb'
print(type(des.des_descrypt(des.des_encrypt(str(a)))),des.des_descrypt(des.des_encrypt(str(a)))) #执行解密方法,因为解密后的数据依旧是Bytes类型
>>> <class 'bytes'> b"{'code': 0, 'msg': 'Success', 'data': [{'id': 1, 'IP': '192.168.1.12'}]}"
print(type(des.des_descrypt(des.des_encrypt(str(a))).decode('raw_unicode_escape')),des.des_descrypt(des.des_encrypt(str(a))).decode('raw_unicode_escape')) # 通过 .decode('raw_unicode_escape') 编码转为Str
>>> <class 'str'> {'code': 0, 'msg': 'Success', 'data': [{'id': 1, 'IP': '192.168.1.12'}]}