cryptography,一个在 Python 中用于加密和解密操作的库

文摘   2024-12-07 18:10   四川  
今天为大家介绍一个在 Python 中用于加密和解密操作的库——cryptography
它提供了多种加密算法和工具,帮助开发者实现数据保护、身份验证和加密通信等功能。
该库涵盖了对称加密、非对称加密、哈希算法、消息认证码(MAC)等基本加密技术,适用于各种安全应用场景。
要使用 cryptography 库,首先需要安装它。可以通过以下命令安装:
pip install cryptography
对称加密(AES)
对称加密使用相同的密钥进行加密和解密。
最常见的对称加密算法是 AES(高级加密标准)。
cryptography 提供了多种模式(如 CBC、GCM 等)。
示例:使用 AES-CBC 加密和解密
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modesfrom cryptography.hazmat.backends import default_backendfrom cryptography.hazmat.primitives import paddingimport os# 生成密钥和IVkey = os.urandom(32)  # 256-bit keyiv = os.urandom(16)   # 128-bit IV# 创建加密器cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())encryptor = cipher.encryptor()# 填充明文data = b"Hello, World!"padder = padding.PKCS7(128).padder()padded_data = padder.update(data) + padder.finalize()# 加密ciphertext = encryptor.update(padded_data) + encryptor.finalize()print(f"Ciphertext: {ciphertext}")
非对称加密(RSA)
非对称加密使用一对公钥和私钥。常用于数字签名和安全密钥交换。
下面是使用 RSA 进行加密和解密的基本示例。
示例:RSA 非对称加密
from cryptography.hazmat.primitives.asymmetric import rsafrom cryptography.hazmat.primitives import hashesfrom 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()# 加密message = b"Encrypt this message"ciphertext = public_key.encrypt(    message,    padding.OAEP(        mgf=padding.MGF1(algorithm=hashes.SHA256()),        algorithm=hashes.SHA256(),        label=None    ))# 解密plaintext = private_key.decrypt(    ciphertext,    padding.OAEP(        mgf=padding.MGF1(algorithm=hashes.SHA256()),        algorithm=hashes.SHA256(),        label=None    ))print(f"Decrypted message: {plaintext}")
哈希算法(SHA-256)
哈希算法通常用于验证数据完整性。SHA-256 是一种常见的哈希算法。
示例:使用 SHA-256 计算哈希
from cryptography.hazmat.primitives import hashes# 创建 SHA-256 哈希对象digest = hashes.Hash(hashes.SHA256())# 更新数据并计算哈希值data = b"Hello, World!"digest.update(data)hash_value = digest.finalize()print(f"SHA-256 Hash: {hash_value.hex()}")
使用 Fernet 对称加密
Fernet 是一个提供安全对称加密的方案,它简化了密钥管理,内置了加密和认证功能。
示例:使用 Fernet 加密和解密
from cryptography.fernet import Fernet# 生成密钥key = Fernet.generate_key()cipher = Fernet(key)# 加密data = b"Secret message"ciphertext = cipher.encrypt(data)# 解密plaintext = cipher.decrypt(ciphertext)print(f"Decrypted message: {plaintext.decode()}")
使用 ECDSA(椭圆曲线数字签名算法)
ECDSA 是一种基于椭圆曲线密码学的数字签名算法,提供了更高效的签名生成和验证方法。
示例:使用 ECDSA 签名和验证
from cryptography.hazmat.primitives import hashesfrom cryptography.hazmat.primitives.asymmetric import ec# 生成 ECDSA 密钥对private_key = ec.generate_private_key(ec.SECP256R1(), default_backend())public_key = private_key.public_key()# 签名message = b"Important message"signature = private_key.sign(message, hashes.SHA256())# 验证签名try:    public_key.verify(signature, message, hashes.SHA256())    print("Signature is valid!")except Exception as e:    print(f"Signature verification failed: {e}")
文件加密与解密
将文件加密存储,并通过安全的方式进行解密,确保数据隐私。
示例:文件加密与解密
def encrypt_file(file_path, key):    cipher = Fernet(key)    with open(file_path, "rb") as file:        data = file.read()        encrypted_data = cipher.encrypt(data)        with open(file_path + ".enc", "wb") as enc_file:        enc_file.write(encrypted_data)def decrypt_file(file_path, key):    cipher = Fernet(key)    with open(file_path, "rb") as enc_file:        encrypted_data = enc_file.read()        decrypted_data = cipher.decrypt(encrypted_data)        with open(file_path.replace(".enc", ".dec"), "wb") as dec_file:        dec_file.write(decrypted_data)
用户密码存储与验证
使用哈希和盐值(Salt)技术来安全存储用户密码。
示例:密码哈希存储
from cryptography.hazmat.primitives import hashesfrom cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMACimport osdef hash_password(password):    salt = os.urandom(16)    kdf = PBKDF2HMAC(        algorithm=hashes.SHA256(),         length=32,         salt=salt,         iterations=100000    )    hashed_password = kdf.derive(password.encode())    return salt + hashed_passworddef verify_password(stored_password, password):    salt = stored_password[:16]    stored_hash = stored_password[16:]        kdf = PBKDF2HMAC(        algorithm=hashes.SHA256(),        length=32,        salt=salt,        iterations=100000    )    kdf.verify(password.encode(), stored_hash)
cryptography 库为 Python 提供了强大的加密支持,涵盖了对称加密、非对称加密、哈希、签名、消息认证码等基本加密技术。
它既有高层接口,便于快速集成,又有低层接口,适合需要更高控制的场景。
随着安全性需求的提升,cryptography 是开发安全应用不可或缺的工具之一。
本文详细介绍了 cryptography 库的安装方法、基本用法和高级功能,以及实际应用场景。
希望通过本文大家能够全面了解和熟练使用 cryptography 库,在实际项目中充分发挥其优势。
今天的 Python 学习之旅就到这里啦!记得多多实践哦~有任何问题,随时在评论区留言。

羽高
现代都市剧发烧友,喜欢追星、看剧抠细节,哈姆雷特视角看世界,看人性
 最新文章