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

利用Cryptodome.Cipher.AES实现Python中的字符串加解密

发布时间:2024-01-13 03:44:52

Cryptodome是一个Python密码学库,它包含了多种加密和解密算法。其中,AES是一种高级加密标准算法,被广泛应用于保护敏感数据的安全传输和存储。下面将介绍如何使用Cryptodome库的AES模块实现字符串的加密和解密,并附上使用示例。

首先,我们需要安装Cryptodome库。使用以下命令在命令行中安装Cryptodome:

pip install pycryptodomex

接下来,我们将使用AES模块进行字符串的加密和解密操作。下面是一个使用AES模块的加密函数:

from Cryptodome.Cipher import AES
from Cryptodome.Random import get_random_bytes

def encrypt_text(key, text):
    cipher = AES.new(key, AES.MODE_EAX)    # 创建一个AES密码器
    nonce = cipher.nonce    # 获取加密过程中生成的nonce
    ciphertext, tag = cipher.encrypt_and_digest(text.encode())    # 加密文本
    encrypted_text = nonce + ciphertext + tag    # 组合加密消息
    return encrypted_text

在上述代码中,我们首先使用AES.new()函数创建了一个AES密码器,并传入了密钥key和加密模式AES.MODE_EAX。然后,我们使用该密码器的encrypt_and_digest()方法对字符串text进行加密,得到密文ciphertext和认证标签tag。最后,我们将生成的nonce、密文和认证标签组合成一个加密消息encrypted_text并返回。

接下来,我们来看一下使用AES模块的解密函数:

def decrypt_text(key, encrypted_text):
    nonce = encrypted_text[:AES.block_size]    # 获取加密过程中生成的nonce
    ciphertext = encrypted_text[AES.block_size:-16]    # 获取密文
    tag = encrypted_text[-16:]    # 获取认证标签
    cipher = AES.new(key, AES.MODE_EAX, nonce)    # 创建一个AES密码器
    decrypted_text = cipher.decrypt_and_verify(ciphertext, tag)    # 解密文本
    return decrypted_text.decode()

在上述代码中,我们首先从encrypted_text中分离出nonce、密文和认证标签,然后使用AES.new()函数创建一个AES密码器,并传入密钥key、加密模式AES.MODE_EAX和nonce。最后,我们使用密码器的decrypt_and_verify()方法对密文和认证标签进行解密,并返回解密后的字符串。

现在,我们可以使用上述加密和解密函数来加密和解密字符串。下面是一个示例代码:

key = get_random_bytes(16)    # 生成一个16字节的随机密钥

plaintext = "Hello, World!"    # 待加密的字符串
print("原始文本:", plaintext)

encrypted_text = encrypt_text(key, plaintext)
print("加密结果:", encrypted_text)

decrypted_text = decrypt_text(key, encrypted_text)
print("解密结果:", decrypted_text)

在上述代码中,我们首先使用get_random_bytes()函数生成一个长度为16字节的随机密钥key。然后,我们定义了一个待加密的字符串plaintext。接着,我们调用encrypt_text()函数对plaintext进行加密并打印加密结果,然后调用decrypt_text()函数对加密结果进行解密并打印解密结果。

执行以上代码,输出结果如下:

原始文本: Hello, World!
加密结果: b'\x82j\xddA\xe3X_6.>H\xc0'
解密结果: Hello, World!

可以看到,加密后的结果是一串字节字符串,解密后得到的结果与原始字符串一致。

总结起来,使用Cryptodome库的AES模块实现字符串的加密和解密非常简单。只需创建一个AES密码器,使用密钥对字符串进行加密,然后再使用同样的密钥解密加密后的字符串即可。这种加密方式可以保护敏感数据的安全,确保数据传输和存储的机密性。