欢迎访问宙启技术站
智能推送

使用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模式。

另外,密钥的安全性也非常重要。在实际应用中,应该使用安全的方法来生成密钥,并妥善保管密钥,确保只有授权的人可以获得密钥和密文。