PYTHON 幫助

PyCryptodome(它對開發人員的作用)

發佈 2024年7月1日
分享:

在數位轉型的時代,強大的加密機制的重要性不言而喻。加密保證了數據在各個網絡和系統中傳輸時的安全性和隱私性。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

核心概念和模組

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 結合使用時,這是一個用於加密操作的強大庫,開發人員可以為 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 的詳細教程。

< 上一頁
WhisperX Python(對開發者的工作原理)
下一個 >
OpenTelemetry Python(對開發者的運作方式)

準備開始了嗎? 版本: 2024.9 剛剛發布

免費 pip 安裝 查看許可證 >