PYTHON帮助

使用 PyCryptodome 在 Python 中进行加密

在数字化转型时代,强大的加密机制的重要性怎么强调都不为过。 密码学确保数据在各种网络和系统中传输时的安全性和隐私性。 PyCryptodome 是一个在加密领域中脱颖而出的 Python 库,提供了大量功能以促进安全数据处理,例如认证加密模式(GCM、CCM、EAX、SIV、OCB)和加速 AES,并提供一流的支持。 本文将深入探讨 PyCryptodome 的最新官方版本,探索其功能、用例、简化的安装过程以及如何在各种应用中有效使用。 我们还将使用单独的 C# 库 IronPDF 与 PyCryptodome 创建加密的 PDF 文件。

PyCryptodome 概述

PyCryptodome 是一个独立的 Python 包,包含低级加密原语。 它被设计为旧 PyCrypto 库的直接替代品,解决了它的许多局限性并扩展了它的功能。 它提供了广泛的加密算法和协议,对于需要在应用程序中实现安全功能的开发人员来说,是一个非常宝贵的工具。

主要功能

  1. 广泛的算法支持:PyCryptodome 支持包括 AES、RSA、DSA 在内的多种加密算法。 这种广泛的支持可确保开发人员找到满足各种加密需求的必要工具。

  2. 易用性:该库被设计为用户友好,具有清晰简洁的API,即使是加密知识有限的人也能有效实现安全功能。

  3. 积极维护:与其前身 PyCrypto 不同,PyCryptodome 积极维护,定期进行更新和改进,确保与最新的 Python 版本和安全标准兼容。

  4. 自包含:PyCryptodome 不需要任何外部依赖,使其在不同环境中安装和使用都很简单。

  5. 与现有库的集成:PyCryptodome 可以无缝集成到其他 Python 库和框架中,从而增强其在各种应用中的实用性。

安装

由于 PyCryptodome 是独立的,因此安装过程非常简单。 可以通过 Python 的包管理工具 pip 使用以下命令进行安装:

pip install pycryptodome
pip install pycryptodome
SHELL

核心概念和模块

PyCryptodome 分成几个模块,每个模块涉及密码学的不同方面。 了解这些模块对于有效利用该库至关重要。

散列

哈希函数是密码学的基础,它提供了一种从任意数据生成固定大小哈希值的方法。 PyCryptodome通过Crypto.Hash模块支持多种哈希算法。

使用 SHA-256 哈希函数的示例

from Crypto.Hash import SHA256
hash_object = SHA256.new(data=b'Hello, PyCryptodome!')
print(hash_object.hexdigest())
python
PYTHON

PyCryptodome(开发者指南):图1 - 散列输出

对称加密

对称加密是指加密和解密都使用相同的密钥。 PyCryptodome 的 Crypto.Cipher 模块支持几种对称加密算法,包括 AES、DES 等。

AES 加密和解密示例

from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

key = get_random_bytes(16)  # 16 bytes for AES-128
cipher = AES.new(key, AES.MODE_EAX)
data = b'Secret Message'
nonce = cipher.nonce
ciphertext, tag = cipher.encrypt_and_digest(data)

# Decryption
cipher = AES.new(key, AES.MODE_EAX, nonce=nonce)
plaintext = cipher.decrypt(ciphertext)
try:
    cipher.verify(tag)
    print("The message is authentic:", plaintext)
except ValueError:
    print("Key incorrect or message corrupted")
python
PYTHON

PyCryptodome(开发人员如何使用):图2 - AES输出

非对称加密

非对称加密使用一对密钥:用于加密的公钥和用于解密的私钥。 PyCryptodome 的 Crypto.PublicKey 模块提供对 RSA、DSA 和 ECC(椭圆曲线加密)的支持。

RSA 加密和解密示例

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

key = RSA.generate(2048)
public_key = key.publickey()
cipher = PKCS1_OAEP.new(public_key)
ciphertext = cipher.encrypt(b'Secret Message')

# Decryption
cipher = PKCS1_OAEP.new(key)
plaintext = cipher.decrypt(ciphertext)
print(plaintext)
python
PYTHON

PyCryptodome(它如何为开发人员工作):图3 - RSA输出

关键引申

密钥推导函数根据密码或口令生成加密密钥。 这对基于密码的加密尤其有用。 PyCryptodome 支持 PBKDF2、scrypt 和其他密钥生成算法。

使用 PBKDF2 的示例

from Crypto.Protocol.KDF import PBKDF2
from Crypto.Random import get_random_bytes

password = b'my secret password'
salt = get_random_bytes(16)
key = PBKDF2(password, salt, dkLen=32, count=1000000)
print(key)
python
PYTHON

PyCryptodome(它如何为开发者工作):图 4 - PBKDF2 输出

使用案例

密码管理

密码管理器受益于 PyCryptodome 的密钥推导功能,可以安全地存储和检索用户密码。 通过使用 PBKDF2 等强密钥推导算法,开发人员可以确保存储的密码能够抵御暴力破解攻击。

密码安全实例

from Crypto.Protocol.KDF import PBKDF2
from Crypto.Random import get_random_bytes
from Crypto.Cipher import AES

# Derive a strong key from a password
password = b'user_password'
salt = get_random_bytes(16)
key = PBKDF2(password, salt, dkLen=32, count=1000000)

# Encrypt the password before storing
cipher = AES.new(key, AES.MODE_EAX)
stored_password = b'ActualPassword'
nonce = cipher.nonce
ciphertext, tag = cipher.encrypt_and_digest(stored_password)

# Store ciphertext, nonce, salt, and tag securely
password_data = {
    'ciphertext': ciphertext,
    'nonce': nonce,
    'salt': salt,
    'tag': tag
}

# Decrypt the password when needed
key = PBKDF2(password, password_data['salt'], dkLen=32, count=1000000)
cipher = AES.new(key, AES.MODE_EAX, nonce=password_data['nonce'])
plaintext = cipher.decrypt(password_data['ciphertext'])
try:
    cipher.verify(password_data['tag'])
    print("The stored password is authentic:", plaintext)
except ValueError:
    print("Key incorrect or password corrupted")
python
PYTHON

PyCryptodome(它如何为开发人员工作):图 5 - 保护密码输出

IronPDF for Python

IronPDF 是适用于 Python 的功能强大的 PDF 生成库,允许开发人员毫不费力地创建、编辑和处理 PDF 文档。 它提供了广泛的功能,从将 HTML 转换为 PDF 到合并多个 PDF,使其成为自动化文档工作流程的理想选择。 PyCryptodome 是一个强大的加密操作库,与 PyCryptodome 结合使用时,开发人员可以为其 PDF 文档添加加密和数字签名等安全功能。 这种集成对于需要高度安全性和数据完整性的应用程序尤其有用,例如金融、法律或保密环境中的应用程序。

要安装IronPDF,您可以使用Python包管理器pip。 下面介绍如何开始:

pip install ironpdf
pip install ironpdf
SHELL

PyCryptodome(它如何为开发人员工作):图6 - IronPDF

安装完成后,您就可以开始使用 IronPDF 创建和处理 PDF 了。 下面是一个简单的示例,演示如何使用 IronPDF 创建 PDF,然后使用 PyCryptodome 进行加密:

from ironpdf import *     
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import os

renderer = ChromePdfRenderer()
pdfFromUrl = renderer.RenderUrlAsPdf("https://ironpdf.com/")
pdfFromUrl.SaveAs("output.pdf")

# Encrypt the PDF with AES
def encrypt_file(file_name, key):
    cipher = AES.new(key, AES.MODE_CBC)
    iv = cipher.iv
    with open(file_name, 'rb') as f:
        data = f.read()
    encrypted_data = iv + cipher.encrypt(pad(data, AES.block_size))
    with open(file_name + '.enc', 'wb') as f:
        f.write(encrypted_data)

# Example usage
key = os.urandom(16)  # AES key must be either 16, 24, or 32 bytes long
encrypt_file("output.pdf", key)
python
PYTHON

本脚本展示了使用 IronPDF 创建一个简单的 PDF,然后使用 PyCryptodome 中的 AES 对其进行加密,为构建更复杂、更安全的 PDF 处理应用程序奠定了基础。

PyCryptodome(它如何为开发人员工作):图7 - 加密文件输出

结论

总之,PyCryptodome 是一个功能强大、用途广泛的 Python 库,它极大地增强了开发人员的加密操作,提供了大量算法,并能与 IronPDF 等其他工具轻松集成。 PyCryptodome 具有全面的功能集,包括支持验证加密模式、对称和非对称加密、散列和密钥推导,可满足需要强大安全措施的现代应用程序的需求。 该工具易于使用、可主动维护且自成一体,是在从密码管理到安全文档生成和加密等各种场景中实施安全数据处理的不可或缺的工具,可在日益数字化的世界中确保数据的完整性和保密性。

有关 IronPDF 许可证的详细信息,请参阅 IronPDF 许可证页面。 如需进一步了解,请查看我们将 HTML 转换为 PDF 的详尽教程。

查克尼特·宾
软件工程师
Chaknith 负责 IronXL 和 IronBarcode 的工作。他在 C# 和 .NET 方面拥有深厚的专业知识,帮助改进软件并支持客户。他从用户互动中获得的洞察力,有助于提升产品、文档和整体体验。
< 前一页
在 Python 中使用 WhisperX 进行转录
下一步 >
OpenTelemetry Python (为开发者提供的工作原理)

准备开始了吗? 版本: 2025.5 刚刚发布

查看许可证 >