利用cryptography库使用AES加密算法对数据进行加密和解密的具体程序代码
时间: 2024-09-18 19:13:35 浏览: 55
在Python中,我们可以使用`cryptography`库来实现AES(Advanced Encryption Standard)加密和解密。首先,你需要安装这个库,如果还没有安装,可以使用pip安装:
```bash
pip install cryptography
```
下面是一个简单的示例,展示了如何创建一个AES密钥,以及如何使用它对数据进行加密和解密:
```python
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from cryptography.hazmat.primitives import hashes
# 密码和盐
password = b'some_secure_password'
salt = b'salt_for_key_derivation'
# 使用PBKDF2HMAC生成AES key
kdf = PBKDF2HMAC(
algorithm=hashes.SHA256(),
length=32, # AES-256的key长度为256位
salt=salt,
iterations=100000, # 迭代次数增加安全性
backend=default_backend()
)
key = kdf.derive(password)
# 创建一个AES cipher object
cipher_algorithm = algorithms.AES(key)
cipher_mode = modes.CBC(key[:16]) # CBC模式需要一个16字节的IV,这里假设我们有固定的一个
cipher = Cipher(cipher_algorithm, cipher_mode, backend=default_backend())
# 加密函数
def encrypt(data, iv):
encryptor = cipher.encryptor()
ciphertext = encryptor.update(data) + encryptor.finalize()
return (iv, ciphertext)
# 解密函数
def decrypt(encrypted_data, iv):
decryptor = cipher.decryptor()
decrypted_data = decryptor.update(encrypted_data) + decryptor.finalize()
return decrypted_data
# 示例:加密和解密
plaintext = b'This is a secret message.'
iv = os.urandom(16) # 使用随机生成的16字节IV
encrypted_text = encrypt(plaintext, iv)
decrypted_text = decrypt(encrypted_text[1], encrypted_text[0])
print(f"Original text: {plaintext.decode('utf-8')}")
print(f"Ciphertext: {encrypted_text[1].hex()}")
print(f"Decrypted text: {decrypted_text.decode('utf-8')}")
阅读全文