cryptography

cryptography 是一个 Python 库,用于加密和解密数据。它提供了一系列加密算法、哈希函数、密钥生成和协议,以及用于处理这些算法的工具。cryptography 是一个强大的库,适用于各种加密需求,包括安全通信、数据保护、签名和验证等。 以下是 cryptography 的关键特点和用法:

关键特点

  1. 安全性:提供广泛的安全加密算法和协议,如 AES、RSA、Diffie-Hellman、ECDSA 等。
  2. 兼容性:与 Python 的其他加密库(如 pycrypto)兼容。
  3. 易用性:提供简单的 API,易于集成到现有代码中。
  4. 类型安全:提供类型安全的数据处理,减少因类型错误导致的编程错误。
  5. 文档丰富:提供详细的文档和示例,帮助开发者快速上手。

安装

可以通过pip安装cryptography

pip install cryptography

基本用法

以下是一些使用 cryptography 的基本示例:

AES 加密和解密

from cryptography.fernet import Fernet
# 生成一个密钥
key = Fernet.generate_key()
cipher_suite = Fernet(key)
# 加密数据
encrypted_data = cipher_suite.encrypt(b"hello, world!")
print(encrypted_data)
# 解密数据
decrypted_data = cipher_suite.decrypt(encrypted_data)
print(decrypted_data.decode('utf-8'))

在这个例子中,我们使用 cryptography.fernet 模块来生成一个密钥,并创建一个 Fernet 实例。然后,我们使用 encrypt 方法来加密数据,并使用 decrypt 方法来解密数据。

RSA 加密和解密

from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import padding
# 生成 RSA 密钥对
private_key = rsa.generate_private_key(
    public_exponent=65537,
    key_size=2048,
)
public_key = private_key.public_key()
# 加密数据
ciphertext = public_key.encrypt(
    b"hello, world!",
    padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA256()),
        algorithm=hashes.SHA256(),
        label=None
    )
)
print(ciphertext)
# 解密数据
plaintext = private_key.decrypt(
    ciphertext,
    padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA256()),
        algorithm=hashes.SHA256(),
        label=None
    )
)
print(plaintext.decode('utf-8'))

在这个例子中,我们使用 cryptography.hazmat.primitives.asymmetric 模块来生成一个 RSA 密钥对,并创建一个 rsa.generate_private_key 实例和一个 rsa.PublicKey 实例。然后,我们使用 encrypt 方法来加密数据,并使用 decrypt 方法来解密数据。

使用场景