PYTHON ヘルプ

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は、開発者がPDFドキュメントを簡単に作成、編集、および操作できる、強力なPython用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に変換するための詳細なチュートリアルをご覧ください。

< 以前
PythonでWhisperXを使って文字起こしをする
次へ >
OpenTelemetry Python(開発者向けの利用方法)

準備はできましたか? バージョン: 2024.11.1 新発売

無料 pip インストール ライセンスを表示 >