python数据加密的几种方式
import base64
from Cryptodome.Cipher import AES
from Cryptodome.Cipher import AES
from Cryptodome import Random
from binascii import a2b_hex
class aescrypt():
def __init__(self,key,iv,encode_,text):
self.text = text
self.encode_ = encode_
self.key = self.add_16(key)
self.iv = iv
def add_16(self,test):
test = test.encode(self.encode_)
while len(test) % 16 != 0:
test += b'x00'
return test
def AES_data_ECB(self,text):
self.model = AES.MODE_ECB
self.aes = AES.new(self.key, self.model) # 创建一个aes对象
text = self.add_16(text)
self.encrypt_text = self.aes.encrypt(text)
result = base64.encodebytes(self.encrypt_text).decode().strip()
print('加密后的数据:{}'.format(result))
text = base64.decodebytes(result.encode(self.encode_))
self.decrypt_text = self.aes.decrypt(text)
data = self.decrypt_text.decode(self.encode_).strip(' ')
print('解密后的数据:{}'.format(data))
def AES_data_CFB(self):
iv = Random.new().read(AES.block_size)
mycipher = AES.new(self.key, AES.MODE_CFB, iv) # 使用 key 和iv 初始化AES 对象, 使用MODE_CFB模式
ciptext = iv + mycipher.encrypt(text.encode())
result = base64.b64encode((ciptext)).decode("utf-8")
print('加密后的数据为:{}'.format(result))
ciptext = base64.b64decode(result)
mydecrypt = AES.new(self.key, AES.MODE_CFB, ciptext[:16])
data = mydecrypt.decrypt(ciptext[16:]).decode()
print('解密后的数据为:{}'.format(data))
def AES_data_CBC(self):
ptor = AES.new(self.key, AES.MODE_CBC, self.iv)
sdata = self.text.encode('utf-8')
text = sdata + (16 - len(sdata) % 16) * bytes(' ', 'gbk')
encrypted_text = base64.b64encode(ptor.encrypt(text))
result = str(encrypted_text, encoding="utf8").replace(''', '\'')
print('加密数据为:{}'.format(result))
ptor = AES.new(self.key, AES.MODE_CBC, self.iv)
decrypted_text = ptor.decrypt(base64.b64decode(result))
data = str(decrypted_text.rstrip(bytes(' ', 'utf-8')), 'utf-8')
print('解密后的数据为{}'.format(data))
if __name__ == '__main__':
text = '{"contiguous_size":0,"graph_id":0,"hash_id":"6007115827502439600","mem_offset":2048,"node_size":10,"ref_node_size":0,"stream_group_size":0,"stream_size":1,"tensor_size":10,"tensors":[{"life_end":1,"life_start":0,"lifelong_value":0,"offset":0,"ori_size":64,"size":512,"tensor_id":0},{"life_end":2,"life_start":1,"lifelong_value":0,"offset":512,"ori_size":64,"size":512,"tensor_id":1},{"life_end":4,"life_start":2,"lifelong_value":0,"offset":0,"ori_size":64,"size":512,"tensor_id":2},{"life_end":6,"life_start":3,"lifelong_value":0,"offset":512,"ori_size":64,"size":512,"tensor_id":3},{"life_end":7,"life_start":4,"lifelong_value":0,"offset":1024,"ori_size":64,"size":512,"tensor_id":4},{"life_end":9,"life_start":5,"lifelong_value":0,"offset":0,"ori_size":4,"size":512,"tensor_id":5},{"life_end":8,"life_start":6,"lifelong_value":0,"offset":1536,"ori_size":4,"size":512,"tensor_id":6},{"life_end":7,"life_start":7,"lifelong_value":0,"offset":512,"ori_size":4,"size":512,"tensor_id":7},{"life_end":8,"life_start":8,"lifelong_value":0,"offset":512,"ori_size":4,"size":512,"tensor_id":8},{"life_end":9,"life_start":9,"lifelong_value":0,"offset":512,"ori_size":4,"size":512,"tensor_id":9}]}'
iv = Random.new().read(AES.block_size)
key = 'tq' #密钥
test = aescrypt(key, iv, 'gbk',text)
test.AES_data_CFB() # 使用AES_CFB加密方式
test.AES_data_CBC() # 使用AES_CBC加密方式
test.AES_data_ECB(text) # 使用AES_ECB加密方式



