cryptography 是 Python 中一个强大且广泛使用的加密库,它提供了多种加密算法和工具来支持加密、解密、签名、验证等操作。以下是如何在 Python 中使用 cryptography 库的一些基本示例。
![图片[1]_利用Python Cryptography库实现高级加密功能_知途无界](https://zhituwujie.com/wp-content/uploads/2025/01/d2b5ca33bd20250116122203.png)
首先,你需要安装 cryptography 库。你可以使用 pip 来安装它:
pip install cryptography
对称加密
对称加密是一种使用相同密钥进行加密和解密的加密方法。以下是如何使用 cryptography 库进行对称加密和解密的示例:
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.primitives import padding
from cryptography.hazmat.backends import default_backend
import os
# 生成一个随机的密钥
key = os.urandom(32) # AES-256 需要 32 字节的密钥
iv = os.urandom(16) # 初始化向量 (IV)
# 原始数据
data = b"Secret Message"
# 填充数据以符合块大小要求
padder = padding.PKCS7(algorithms.AES.block_size).padder()
padded_data = padder.update(data) + padder.finalize()
# 创建加密器
cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
encryptor = cipher.encryptor()
# 加密数据
encrypted_data = encryptor.update(padded_data) + encryptor.finalize()
print("Encrypted:", encrypted_data)
# 创建解密器
decipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
decryptor = decipher.decryptor()
# 解密数据
decrypted_padded_data = decryptor.update(encrypted_data) + decryptor.finalize()
# 去除填充
unpadder = padding.PKCS7(algorithms.AES.block_size).unpadder()
decrypted_data = unpadder.update(decrypted_padded_data) + unpadder.finalize()
print("Decrypted:", decrypted_data.decode())
非对称加密
非对称加密使用一对密钥(公钥和私钥)进行加密和解密。以下是如何使用 cryptography 库进行非对称加密和解密的示例:
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives import serialization
# 生成私钥
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048,
backend=default_backend()
)
# 生成公钥
public_key = private_key.public_key()
# 原始数据
data = b"Secret Message"
# 使用公钥加密
ciphertext = public_key.encrypt(
data,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
print("Encrypted:", ciphertext)
# 使用私钥解密
plaintext = private_key.decrypt(
ciphertext,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
print("Decrypted:", plaintext.decode())
数字签名
数字签名用于验证数据的完整性和来源。以下是如何使用 cryptography 库进行数字签名和验证的示例:
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import serialization
# 生成私钥
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048,
backend=default_backend()
)
# 生成公钥
public_key = private_key.public_key()
# 原始数据
data = b"Message to sign"
# 创建签名
signature = private_key.sign(
data,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
print("Signature:", signature)
# 验证签名
try:
public_key.verify(
signature,
data,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
print("Signature is valid.")
except Exception as e:
print("Signature is invalid:", e)
这些示例展示了如何使用 cryptography 库进行基本的加密、解密、签名和验证操作。你可以根据需求调整这些示例以适应更复杂的场景。
© 版权声明
文中内容均来源于公开资料,受限于信息的时效性和复杂性,可能存在误差或遗漏。我们已尽力确保内容的准确性,但对于因信息变更或错误导致的任何后果,本站不承担任何责任。如需引用本文内容,请注明出处并尊重原作者的版权。
THE END

























暂无评论内容