AES加解密

CBC模式
加密:

from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
text = 'wo is liming' #需要加密的内容
while len(text.encode('utf-8')) % 16 != 0:  # 如果text不足16位的倍数就用空格补足为16位        
    text += '\0'
text=text.encode()
mode = AES.MODE_CBC #定义模式
key = '1234567890123456'.encode('utf-8') #秘钥##秘钥:必须是16位字节或者24位字节或者32位字节(因为python3的字符串是unicode编码,需要 encode才可以转换成字节型数据)
iv = b'abcdabcdabcdabcd'   #偏移量--必须16字节
cryptos = AES.new(key, mode, iv)   #创建一个aes对象
cipher_text = cryptos.encrypt(text)  #利用aes对象进行加密#b'\xf7t\xa0\x18 \x84-\xcco-\x91\xf5\xdb\x89\xe3\x88'
x=b2a_hex(cipher_text)  # 因为AES加密后的字符串不一定是ascii字符集的,输出保存可能存在问题,所以这里转为16进制字符串#b'f774a01820842dcc6f2d91f5db89e388'
en_text = x.decode('utf-8') #转换成python中的字符串类型
#<class 'str'> f774a01820842dcc6f2d91f5db89e388
print(type(en_text),en_text)

解密:

from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex

mode = AES.MODE_CBC #定义模式
key = '1234567890123456'.encode('utf-8') #秘钥
##秘钥:必须是16位字节或者24位字节或者32位字节(因为python3的字符串是unicode编码,需要 encode才可以转换成字节型数据)
iv = b'abcdabcdabcdabcd'   #偏移量--必须16字节
cryptos = AES.new(key, mode, iv)   #创建一个aes对象

text = 'f774a01820842dcc6f2d91f5db89e388' #需要解密的内容
x=a2b_hex(text)  # 16进制转换成二进制
b'\xf7t\xa0\x18 \x84-\xcco-\x91\xf5\xdb\x89\xe3\x88'
x=cryptos.decrypt(x)  #解密
# b'wo is liming\x00\x00\x00\x00'
x=bytes.decode(x).rstrip('\0')  #转换成字符串
#<class 'str'> wo is liming

print(type(x),x)
posted @ 2021-09-14 15:33  kopok  阅读(125)  评论(0编辑  收藏  举报