给出用python编写的基于口令的数据加密
时间: 2024-06-09 17:06:11 浏览: 108
以下是一个基于口令的数据加密示例,使用Python的cryptography库和PBKDF2算法:
```python
from cryptography.fernet import Fernet
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from cryptography.hazmat.primitives import hashes
def generate_key(password: str, salt: bytes) -> bytes:
kdf = PBKDF2HMAC(
algorithm=hashes.SHA256(),
length=32,
salt=salt,
iterations=100000
)
key = kdf.derive(password.encode())
return key
def encrypt_data(data: bytes, password: str) -> bytes:
salt = os.urandom(16)
key = generate_key(password, salt)
f = Fernet(key)
encrypted_data = f.encrypt(data)
return salt + encrypted_data
def decrypt_data(data: bytes, password: str) -> bytes:
salt, encrypted_data = data[:16], data[16:]
key = generate_key(password, salt)
f = Fernet(key)
decrypted_data = f.decrypt(encrypted_data)
return decrypted_data
```
这个加密方法使用PBKDF2算法从用户提供的密码生成一个加密密钥,并使用这个密钥对数据进行加密和解密。加密和解密时都需要提供相同的密码。
示例中使用的Fernet加密算法是对称加密算法,意味着加密和解密使用相同的密钥。加密后的数据包含一个随机生成的16字节盐,这个盐用于加密密钥的生成,保证每次加密使用的密钥都不同。
阅读全文