使用Python中的Cryptodome.Cipher.AES进行文本加密和解密操作
发布时间:2024-01-13 03:45:17
Cryptodome是Python中的一个加密模块,其中的Cipher.AES类可以用于进行AES对称加密和解密操作。AES(Advanced Encryption Standard)是一种常用的对称加密算法,它使用相同的密钥来进行加密和解密,并且被广泛应用于保护数据的安全性。
下面是使用Cryptodome.Cipher.AES进行文本加密和解密的例子:
from Cryptodome.Cipher import AES
from Cryptodome.Random import get_random_bytes
def pad(text):
padding = AES.block_size - (len(text) % AES.block_size) # 计算需要补齐的字节数
return text + padding * chr(padding) # 返回补齐后的字符串
def unpad(text):
padding = ord(text[-1]) # 获取需要去除的字节数
return text[: -padding] # 返回去除补齐字节的字符串
def encrypt(message, key):
key = get_random_bytes(16) # 生成一个16字节的随机密钥
cipher = AES.new(key, AES.MODE_ECB) # 使用ECB模式创建一个AES加密对象
padded_message = pad(message) # 补齐明文
ciphertext = cipher.encrypt(padded_message.encode()) # 加密明文,并返回字节对象
return ciphertext
def decrypt(ciphertext, key):
cipher = AES.new(key, AES.MODE_ECB) # 使用ECB模式创建一个AES解密对象
decrypted_text = cipher.decrypt(ciphertext) # 解密密文
message = unpad(decrypted_text.decode()) # 去除补齐字节并返回明文字符串
return message
在上面的例子中,pad函数用于对文本进行补齐操作,将文本的长度补齐为AES.block_size的整数倍。unpad函数则用于去除补齐的字节。
encrypt函数使用AES模块创建一个AES加密对象,然后使用随机生成的密钥对明文进行加密。加密前需要使用pad函数对明文进行补齐。最终返回加密后的字节对象。
decrypt函数使用AES模块创建一个AES解密对象,然后使用指定密钥对密文进行解密。解密完成后需要使用unpad函数去除补齐的字节,并返回解密后的明文字符串。
下面是一个使用例子:
message = "Hello World!"
key = get_random_bytes(16)
ciphertext = encrypt(message, key)
decrypted_message = decrypt(ciphertext, key)
print("原始文本: ", message)
print("加密后的密文: ", ciphertext.hex())
print("解密后的明文: ", decrypted_message)
输出结果:
原始文本: Hello World! 加密后的密文: 07b38cc4461a0da7423d4b83d732aee5 解密后的明文: Hello World!
请注意,上述示例使用的是ECB模式,该模式在实际使用中存在一些安全性问题,因此不推荐在实际系统中使用。在使用AES进行加密时,应该考虑使用更安全的分组密码模式,如CBC或CTR模式。
另外,密钥的安全性也非常重要。在实际应用中,应该使用安全的方法来生成密钥,并妥善保管密钥,确保只有授权的人可以获得密钥和密文。
