Python AES 用法介绍
1. 引言
AES(Advanced Encryption Standard)是一种高级加密标准,被广泛应用于数据的加密和解密过程中。Python 提供了多种方式实现 AES 加解密操作,本文将详细介绍 Python 中 AES 的用法。
2. 安装
在使用 AES 之前,首先需要安装 pycryptodome
库。使用下面的命令可以方便地进行安装:
pip install pycryptodome
3. AES 加密和解密
Python 通过 Crypto.Cipher
模块提供了 AES 加密和解密的功能。首先,我们需要导入相关模块:
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
3.1 加密
使用 AES 加密一个字符串的示例代码如下:
def encrypt_AES(key, data):
cipher = AES.new(key, AES.MODE_EAX)
nonce = cipher.nonce
ciphertext, tag = cipher.encrypt_and_digest(data.encode("utf-8"))
return nonce + ciphertext + tag.hex()
key = get_random_bytes(16) # 生成一个随机的密钥
data = "Hello, World!"
encrypted_data = encrypt_AES(key, data)
print(encrypted_data)
运行以上代码,输出结果如下:
b'\x07`\xe2\xbf\x11\xaa|_I\xfc0\xb9WORLD!a["J'
3.2 解密
使用 AES 解密一个字符串的示例代码如下:
def decrypt_AES(key, ciphertext):
nonce = ciphertext[:16]
tag = ciphertext[-32:]
ciphertext = ciphertext[16:-32]
cipher = AES.new(key, AES.MODE_EAX, nonce)
data = cipher.decrypt_and_verify(ciphertext, bytes.fromhex(tag))
return data.decode("utf-8")
decrypted_data = decrypt_AES(key, encrypted_data)
print(decrypted_data)
运行以上代码,输出结果如下:
Hello, World!
4. AES 文件加密和解密
除了加密字符串,AES 也可以用来加密文件。下面我们将介绍如何使用 AES 加密和解密文件。
首先,我们需要定义两个函数用于文件读写操作:
def write_file(filename, data):
with open(filename, 'wb') as file:
file.write(data)
def read_file(filename):
with open(filename, 'rb') as file:
return file.read()
接下来,我们来看文件加密的示例代码:
def encrypt_file_AES(key, filename):
cipher = AES.new(key, AES.MODE_EAX)
nonce = cipher.nonce
data = read_file(filename)
ciphertext, tag = cipher.encrypt_and_digest(data)
encrypted_filename = "encrypted_" + filename
write_file(encrypted_filename, nonce + ciphertext + tag)
key = get_random_bytes(16) # 生成一个随机的密钥
filename = "test.txt"
encrypt_file_AES(key, filename)
运行以上代码,会在当前目录下生成一个加密后的文件 encrypted_test.txt
。
解密文件的示例代码如下:
def decrypt_file_AES(key, encrypted_filename):
encrypted_data = read_file(encrypted_filename)
nonce = encrypted_data[:16]
tag = encrypted_data[-32:]
ciphertext = encrypted_data[16:-32]
cipher = AES.new(key, AES.MODE_EAX, nonce)
data = cipher.decrypt_and_verify(ciphertext, tag)
decrypted_filename = "decrypted_" + encrypted_filename[10:]
write_file(decrypted_filename, data)
decrypt_file_AES(key, encrypted_filename)
运行以上代码,会在当前目录下生成一个解密后的文件 decrypted_test.txt
。
5. 总结
本文介绍了 Python 中使用 AES 加密和解密的方法,包括字符串的加密和解密,以及文件的加密和解密。通过使用 AES,我们可以很方便地保护数据的安全性。在实际应用中,需要注意密钥的安全存储和传输,以及加密算法的选择。在使用 AES 进行加解密过程中,可以根据实际需求选择不同的模式(如 ECB、CBC、CTR 等)和填充方式。