AES和RSA的加密过程通过面向对象的方式写成一个类,封装起来

时间:2023-03-09 04:57:16
AES和RSA的加密过程通过面向对象的方式写成一个类,封装起来
# 面向对象的方式 实现加密方法

 from Crypto.Cipher import AES
from Crypto import Random
from binascii import b2a_hex, a2b_hex class My_Aes(): def __init__(self, key, mode = AES.MODE_CFB ):
self.key = self.check_key(key)
self.mode = mode
self.iv = Random.new().read(AES.block_size) def check_key(self, key):
"""
对秘钥进行类型检查
:param key:
:return:
"""
if isinstance(key, bytes):
assert len(key) in [16,24,32]
return key
elif isinstance(key, str):
assert len(key.encode()) in [16,24,36]
return key.encode()
else:
raise Exception('秘钥必须为str或者bytes类型,不能为{}'.format(type(key))) def encrypt(self, data):
aes = AES.new(self.key, self.mode, self.iv)
return b2a_hex(aes.encrypt(data)) def decrypt(self, data):
aes = AES.new(self.key, self.mode, self.iv)
print(aes.decrypt(a2b_hex(data))) if __name__ == '__main__':
aes = My_Aes('abcdefghhgfedcba')
data = aes.encrypt(b'hello world')
aes.decrypt(data) # rsa加密
import rsa
import binascii class rasData(): def __init__(self, rsa_n, rsa_e, data ):
self.rsa_n = int(rsa_n, 16)
self.rsa_e = int(rsa_e, 16)
self.data = data def rsa_en(self):
key = rsa.PublicKey(self.rsa_n, self.rsa_e)
data = rsa.encrypt(self.data.encode(), key)
return data, binascii.b2a_hex(data).decode() if __name__ == '__main__':
pubkey_n = '8d7e6949d411ce14d7d233d7160f5b2cc753930cabaaa'
pubkey_e = '10002'
data = '潭州学院'
file = rasData(pubkey_n, pubkey_e, data)
print(file.rsa_en())