使用Python实现AES加密解密
AES(高级加密标准)是一种对称密钥加密的块加密算法。在Python中,我们可以使用pycryptodome
库来实现AES加密和解密。如果你还没有安装这个库,可以使用pip进行安装:
pip install pycryptodome
下面是一个简单的例子,展示了如何使用AES加密和解密数据:
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
from Crypto.Util.Padding import pad, unpad
# 生成一个随机的16字节(128位)密钥
key = get_random_bytes(16)
# 要加密的数据
data = b"This is a secret message"
# 创建一个AES实例
cipher = AES.new(key, AES.MODE_ECB)
# 加密数据
encrypted_data = cipher.encrypt(pad(data, AES.block_size))
print("Encrypted data:", encrypted_data)
# 创建一个新的AES实例用于解密
decipher = AES.new(key, AES.MODE_ECB)
# 解密数据
decrypted_data = unpad(decipher.decrypt(encrypted_data), AES.block_size)
print("Decrypted data:", decrypted_data)
在这个例子中,我们首先生成了一个随机的16字节密钥,然后创建了一个AES实例,并使用它来加密数据。加密后的数据被打印出来。接着,我们创建了另一个AES实例用于解密,并使用它来解密之前加密的数据。 解密后的数据也被打印出来。
请注意,AES.MODE_ECB
是最简单的模式,但在实际应用中通常不推荐使用,因为它不提供任何形式的填充或错误检测。更常见的模式是AES.MODE_CBC
、AES.MODE_CFB
、AES.MODE_OFB
和AES.MODE_CTR
等,它们提供了更好的安全性和/或性能特性。
Crypto.Util.Padding
模块用于处理数据的填充和去填充,因为AES要求输入的数据必须是块大小的倍数(对于AES-128,块大小是16字节)。