cryptography.hazmat.primitives.ciphers库详解:了解Python中的加密解密操作
发布时间:2023-12-16 08:32:25
cryptography.hazmat.primitives.ciphers是Python中一个常用的库,用于进行加密和解密操作。它提供了许多常用的加密算法,并且具有灵活的接口和强大的功能。以下是对该库的详细解析,以及一些使用例子。
1. 对称加密算法
对称加密算法使用相同的秘钥进行加密和解密。cryptography.hazmat.primitives.ciphers库提供了一些常用的对称加密算法,如AES、DES和TripleDES等。
使用AES算法进行加密和解密的例子:
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives import padding # 生成秘钥和初始化向量 key = b'sixteen byte key' iv = b'initialization v' # 创建AES算法对象 cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend()) # 创建加密和解密的函数 encryptor = cipher.encryptor() decryptor = cipher.decryptor() # 加密 padder = padding.PKCS7(128).padder() padded_data = padder.update(b'plaintext') + padder.finalize() ciphertext = encryptor.update(padded_data) + encryptor.finalize() # 解密 decrypted_data = decryptor.update(ciphertext) + decryptor.finalize() unpadder = padding.PKCS7(128).unpadder() plaintext = unpadder.update(decrypted_data) + unpadder.finalize() print(plaintext)
2. 消息认证码(MAC)
消息认证码(MAC)可用于验证消息的完整性和真实性。cryptography.hazmat.primitives.ciphers库提供了一些常用的MAC算法,如HMAC和CMAC等。
使用HMAC算法进行消息认证的例子:
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes from cryptography.hazmat.primitives import hmac from cryptography.hazmat.backends import default_backend # 生成秘钥 key = b'sixteen byte key' # 创建HMAC对象 hmac_obj = hmac.HMAC(key, algorithms.SHA256(), backend=default_backend()) # 更新消息 hmac_obj.update(b'message') # 计算认证码 digest = hmac_obj.finalize() print(digest)
3. 非对称加密算法
非对称加密算法使用一对不同的秘钥进行加密和解密。cryptography.hazmat.primitives.ciphers库提供了一些常用的非对称加密算法,如RSA和ECC等。
使用RSA算法进行加密和解密的例子:
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives.keywrap import rsa_oaep.unwrap_key
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.backends import default_backend
# 生成秘钥对
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048,
backend=default_backend()
)
public_key = private_key.public_key()
# 加密
ciphertext = public_key.encrypt(
b'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(plaintext)
总结:
cryptography.hazmat.primitives.ciphers库提供了丰富的加密和解密算法,可以满足各种安全需求。它的使用方法灵活简单,可以帮助开发者轻松实现加密和解密操作。不过,在使用过程中需要注意保护秘钥的安全性,避免被泄露。
