from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
class PrpCrypt(object):
# 密钥(key), 密斯偏移量(iv) CBC模式加密 备注:保证key和iv必须是16位
def __init__(self, key):
self.key = key.encode('utf-8')
self.mode = AES.MODE_CBC
self.iv = ("0"*16).encode('utf-8')
def encrypt(self, text):
text = text.encode('utf-8')
cryptor = AES.new(self.key, self.mode, self.iv)
length = 16
count = len(text)
if count < length:
add = (length - count)
text = text + ('\0' * add).encode('utf-8')
elif count > length:
add = (length - (count % length))
text = text + ('\0' * add).encode('utf-8')
self.ciphertext = cryptor.encrypt(text)
return b2a_hex(self.ciphertext)
def decrypt(self, text):
cryptor = AES.new(self.key, self.mode, self.iv)
plain_text = cryptor.decrypt(a2b_hex(text))
return bytes.decode(plain_text).rstrip('\0')
dic = {
"name": "张三",
"age": "3",
"sex": "1",
"d": "ddasdgfdsg",
}
import json
dic = json.dumps(dic)
print(len(dic))
if __name__ == '__main__':
pc = PrpCrypt('hjkr'*4)
e = pc.encrypt(dic)
d = pc.decrypt(e)
print("加密:", e)
print("解密:", eval(d), type(eval(d)))
使用encode decode进行类型转换,否则会报错