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

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库提供了丰富的加密和解密算法,可以满足各种安全需求。它的使用方法灵活简单,可以帮助开发者轻松实现加密和解密操作。不过,在使用过程中需要注意保护秘钥的安全性,避免被泄露。