# 面向对象的方式 实现加密方法
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())