python对称加密_Python实现AES加密(对称加密)

from Cryptodome.Cipher import AES

from binascii import b2a_hex,a2b_hex

from Cryptodome import Random

class AesEncryption(object):

def __init__(self, key, mode=AES.MODE_CFB):

self.key = self.check_key(key)

# 密钥key长度必须为16,24或者32bytes的长度

self.mode = mode

self.iv = Random.new().read(AES.block_size)

def check_key(self, key):

'检测key的长度是否为16,24或者32bytes的长度'

try:

if isinstance(key, bytes):

assert len(key) in [16, 24, 32]

return key

elif isinstance(key, str):

assert len(key.encode()) in [16, 24, 32]

return key.encode()

else:

raise Exception(f'密钥必须为str或bytes,不能为{type(key)}')

except AssertionError:

print('输入的长度不正确')

def check_data(self,data):

'检测加密的数据类型'

if isinstance(data, str):

data = data.encode()

elif isinstance(data, bytes):

pass

else:

raise Exception(f'加密的数据必须为str或bytes,不能为{type(data)}')

return data

def encrypt(self, data):

' 加密函数 '

data = self.check_data(data)

cryptor = AES.new(self.key, self.mode,self.iv)

return b2a_hex(cryptor.encrypt(data)).decode()

def decrypt(self,data):

' 解密函数 '

data = self.check_data(data)

cryptor = AES.new(self.key, self.mode,self.iv)

return cryptor.decrypt(a2b_hex(data)).decode()

if __name__ == '__main__':

key = input('请输入key:')

data = '你真帅'

aes = AesEncryption(key)

e = aes.encrypt(data) # 调用加密函数

d = aes.decrypt(e) # 调用解密函数

print(e)

print(d)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值