Cryptography,一个神奇的 Python 库!

Cryptography,一个神奇的 Python 库!

一、什么是 Cryptography?

Cryptography 是 Python 中用于加密和解密的强大库,它提供了现代加密算法和协议的实现,支持对称加密、非对称加密、数字签名以及哈希等功能。无论是构建安全的应用程序,还是学习密码学知识,cryptography 都是一个得力工具。


二、安装 Cryptography

在使用前,需要通过以下命令安装:

pip install cryptography

三、Cryptography 的核心功能

Cryptography 提供两种主要层次的 API:

  1. Hazmat 层:底层 API,用于直接实现复杂的加密逻辑。
  2. 加密层:高级 API,便于快速实现常见加密功能。

四、对称加密示例

对称加密使用同一个密钥加密和解密数据。Cryptography 提供了 AES(高级加密标准)等常见算法的支持。

示例:AES 加密和解密

from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.primitives import padding
import os

# 1. 生成密钥和初始化向量 (IV)
key = os.urandom(32)  # 256 位密钥
iv = os.urandom(16)   # 128 位初始化向量

# 2. 创建加密器
cipher = Cipher(algorithms.AES(key), modes.CBC(iv))
encryptor = cipher.encryptor()

# 3. 加密数据
data = b"Hello, Cryptography!"  # 原始数据
padder = padding.PKCS7(algorithms.AES.block_size).padder()  # 填充数据
padded_data = padder.update(data) + padder.finalize()
encrypted_data = encryptor.update(padded_data) + encryptor.finalize()

print("加密后的数据:", encrypted_data)

# 4. 解密数据
decryptor = cipher.decryptor()
decrypted_padded_data = decryptor.update(encrypted_data) + decryptor.finalize()

# 5. 移除填充
unpadder = padding.PKCS7(algorithms.AES.block_size).unpadder()
decrypted_data = unpadder.update(decrypted_padded_data) + unpadder.finalize()

print("解密后的数据:", decrypted_data.decode())

运行结果

加密后的数据: b'\xaf\x1b\x...'
解密后的数据: Hello, Cryptography!

五、非对称加密示例

非对称加密使用公钥加密、私钥解密。常用算法包括 RSA 和 ECC。

示例:生成 RSA 密钥并加密解密

from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import serialization, hashes

# 1. 生成 RSA 密钥对
private_key = rsa.generate_private_key(
    public_exponent=65537,
    key_size=2048
)
public_key = private_key.public_key()

# 2. 使用公钥加密数据
message = b"Hello, RSA!"
encrypted_message = public_key.encrypt(
    message,
    padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA256()),
        algorithm=hashes.SHA256(),
        label=None
    )
)

print("加密后的数据:", encrypted_message)

# 3. 使用私钥解密数据
decrypted_message = private_key.decrypt(
    encrypted_message,
    padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA256()),
        algorithm=hashes.SHA256(),
        label=None
    )
)

print("解密后的数据:", decrypted_message.decode())

运行结果

加密后的数据: b'\x89\x15...'
解密后的数据: Hello, RSA!

六、哈希算法示例

哈希算法是一种将数据映射到固定长度字符串的单向函数,常用于数据完整性校验。

示例:SHA-256 哈希

from cryptography.hazmat.primitives import hashes

# 创建哈希对象
digest = hashes.Hash(hashes.SHA256())
digest.update(b"Hello, Cryptography!")
hash_value = digest.finalize()

print("SHA-256 哈希值:", hash_value.hex())

运行结果

SHA-256 哈希值: 33297f...

七、数字签名示例

数字签名用于验证数据的真实性和完整性。

示例:RSA 数字签名

from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import hashes

# 1. 签名数据
message = b"Secure Message"
signature = private_key.sign(
    message,
    padding.PSS(
        mgf=padding.MGF1(hashes.SHA256()),
        salt_length=padding.PSS.MAX_LENGTH
    ),
    hashes.SHA256()
)

print("数字签名:", signature)

# 2. 验证签名
try:
    public_key.verify(
        signature,
        message,
        padding.PSS(
            mgf=padding.MGF1(hashes.SHA256()),
            salt_length=padding.PSS.MAX_LENGTH
        ),
        hashes.SHA256()
    )
    print("签名验证成功!")
except:
    print("签名验证失败!")

八、常见问题

1. 密钥如何安全存储?

  • 使用 密钥管理服务(KMS) 或安全的硬件设备(如 HSM)。
  • 使用文件加密或数据库加密存储密钥。

2. 为什么选择 Cryptography 而不是其他库?

  • Cryptography 提供更高的安全性和最新算法的实现。
  • 它支持高级和底层 API,既适合初学者也适合专家。

九、总结

通过 Cryptography,你可以轻松实现加密、解密、哈希、数字签名等操作。它的简洁 API 和强大功能使其成为 Python 安全编程的首选工具。

建议:从基础加密 API 入手,逐步学习高级功能,最终结合实际需求设计安全的系统!

最后修改于:2024年11月26日 21:06

评论已关闭

推荐阅读

DDPG 模型解析,附Pytorch完整代码
2024年11月24日
DQN 模型解析,附Pytorch完整代码
2024年11月24日
AIGC实战——Transformer模型
2024年12月01日
Socket TCP 和 UDP 编程基础(Python)
2024年11月30日
python , tcp , udp
如何使用 ChatGPT 进行学术润色?你需要这些指令
2024年12月01日
AI
最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)
2024年11月24日
ChatGPT 和 DALL·E 2 配合生成故事绘本
2024年12月01日
omegaconf,一个超强的 Python 库!
2024年11月24日
【视觉AIGC识别】误差特征、人脸伪造检测、其他类型假图检测
2024年12月01日
[超级详细]如何在深度学习训练模型过程中使用 GPU 加速
2024年11月29日
Python 物理引擎pymunk最完整教程
2024年11月27日
MediaPipe 人体姿态与手指关键点检测教程
2024年11月27日
深入了解 Taipy:Python 打造 Web 应用的全面教程
2024年11月26日
基于Transformer的时间序列预测模型
2024年11月25日
Python在金融大数据分析中的AI应用(股价分析、量化交易)实战
2024年11月25日
AIGC Gradio系列学习教程之Components
2024年12月01日
Python3 `asyncio` — 异步 I/O,事件循环和并发工具
2024年11月30日
llama-factory SFT系列教程:大模型在自定义数据集 LoRA 训练与部署
2024年12月01日
Python 多线程和多进程用法
2024年11月24日
Python socket详解,全网最全教程
2024年11月27日