PYTHON帮助

使用 PyCryptodome 在 Python 中进行加密

发布 2024年七月1日
分享:

在数字化转型时代,强大的加密机制的重要性怎么强调都不为过。 密码学确保数据在各种网络和系统中传输时的安全性和隐私性。 PyCryptodome 是一个 Python 库,它在密码学领域脱颖而出,提供了大量功能来促进安全的数据处理,如认证加密模式等。(GCM、CCM、EAX、SIV、OCB)我们还将为您提供一流的支持,包括 AES 和加速 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

核心概念和模块

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

散列

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

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

from Crypto.Hash import SHA256
hash_object = SHA256.new(data=b'Hello, PyCryptodome!')
print(hash_object.hexdigest())
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

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

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

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

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

IronPDF for Python

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

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

pip install ironpdf

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

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

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

结论

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

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

< 前一页
在 Python 中使用 WhisperX 进行转录
下一步 >
OpenTelemetry Python (为开发者提供的工作原理)

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

免费 pip 安装 查看许可证 >