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

Python中Cryptography.Fernet模块的用法和示例

发布时间:2024-01-20 16:55:56

Cryptography是一个在Python中常用的加密库,其中的Fernet模块提供了一种使用对称密钥加密和解密数据的方法。下面是关于如何使用Cryptography.Fernet模块的用法和示例。

1. 安装Cryptography库

在开始使用之前,首先需要安装Cryptography库。在命令行中使用以下命令即可完成安装:

pip install cryptography

2. 导入所需的模块和方法

在使用之前,我们需要导入Fernet类以及用于生成密钥的方法。

from cryptography.fernet import Fernet
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from cryptography.hazmat.backends import default_backend

3. 生成密钥

使用PBKDF2来生成加密密钥。以下是一个用于生成密钥的示例函数:

def generate_key(password):
    salt = b'salt_'  # 加盐
    kdf = PBKDF2HMAC(
        algorithm=hashes.SHA256(),
        length=32,
        salt=salt,
        iterations=100000,
        backend=default_backend()
    )
    key = kdf.derive(password.encode())
    return key

上述函数使用SHA256哈希算法和100,000次的迭代来生成32字节的密钥。可以根据实际需求调整算法、迭代次数和密钥长度。

4. 加密数据

使用生成的密钥来加密数据。以下是一个用于加密数据的示例函数:

def encrypt_data(data, key):
    f = Fernet(key)
    encrypted_data = f.encrypt(data.encode())
    return encrypted_data

5. 解密数据

使用相同的密钥来解密数据。以下是一个用于解密数据的示例函数:

def decrypt_data(encrypted_data, key):
    f = Fernet(key)
    decrypted_data = f.decrypt(encrypted_data)
    return decrypted_data.decode()

6. 完整示例

下面是一个使用Cryptography.Fernet模块进行加密和解密的完整示例:

from cryptography.fernet import Fernet
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from cryptography.hazmat.backends import default_backend


def generate_key(password):
    salt = b'salt_'
    kdf = PBKDF2HMAC(
        algorithm=hashes.SHA256(),
        length=32,
        salt=salt,
        iterations=100000,
        backend=default_backend()
    )
    key = kdf.derive(password.encode())
    return key


def encrypt_data(data, key):
    f = Fernet(key)
    encrypted_data = f.encrypt(data.encode())
    return encrypted_data


def decrypt_data(encrypted_data, key):
    f = Fernet(key)
    decrypted_data = f.decrypt(encrypted_data)
    return decrypted_data.decode()


password = "my_password"
data = "Hello, Cryptography!"

key = generate_key(password)
encrypted_data = encrypt_data(data, key)
decrypted_data = decrypt_data(encrypted_data, key)

print("Original data:", data)
print("Encrypted data:", encrypted_data)
print("Decrypted data:", decrypted_data)

上述代码中,我们使用"my_password"作为密钥,加密了"Hello, Cryptography!"这个字符串,并成功解密回原始数据。

通过使用Cryptography.Fernet模块,我们可以在Python中轻松地实现加密和解密功能,保护敏感数据的安全性。