PYTHONヘルプ Pythonで暗号化にPyCryptodomeを使用する Curtis Chau 更新日:6月 22, 2025 Download IronPDF pipダウンロード Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article デジタルトランスフォーメーションの時代において、堅牢な暗号化メカニズムの重要性は言うまでもありません。 暗号化は、データがさまざまなネットワークやシステムを通過する際のセキュリティとプライバシーを保証します。 PyCryptodomeは、暗号化の分野で際立ったPythonライブラリであり、認証付き暗号化モード(GCM、CCM、EAX、SIV、OCB)や、第一級のサポート付きの高速AESを含む多くの機能を提供し、安全なデータ処理を促進します。 この記事では、PyCryptodomeの最新公式バージョンを掘り下げ、その機能、ユースケース、簡単なインストールプロセス、およびさまざまなアプリケーションでの効果的な活用方法を探索します。 また、C#の別のライブラリであるIronPDFとPyCryptodomeを使用して暗号化されたPDFファイルを作成します。 PyCryptodomeの概要 PyCryptodomeは、低レベルの暗号化プリミティブを含む自己完結型のPythonパッケージです。 これは、古いPyCryptoライブラリの置換として設計され、多くの制約を解決し、その能力を拡張しました。 広範な暗号化アルゴリズムやプロトコルが提供されており、アプリケーションにセキュリティ機能を実装する必要がある開発者にとって貴重なツールです。 主要機能 幅広いアルゴリズムサポート: PyCryptodomeは、AES、RSA、DSAなどを含む幅広い暗号化アルゴリズムをサポートしています。 この広範なサポートにより、開発者はさまざまな暗号化ニーズに必要なツールを見つけることができます。 使いやすさ: ライブラリは使いやすさを考えた設計となっており、限定的な暗号知識を持つ人でも効果的にセキュリティ機能を実装できるクリアで簡潔なAPIを備えています。 積極的なメンテナンス: その前身であるPyCryptoとは異なり、PyCryptodomeは積極的にメンテナンスされており、定期的な更新と改善があります。これにより、最新のPythonバージョンおよびセキュリティ標準に互換性があります。 自己完結型: PyCryptodomeは外部依存関係を必要としないため、さまざまな環境で簡単にインストールして使用できます。 既存ライブラリとの統合: PyCryptodomeは他のPythonライブラリやフレームワークとシームレスに統合でき、さまざまなアプリケーションでそのユーティリティを高めます。 インストール PyCryptodomeのインストールは、その自己完結型の性質のおかげで簡単なプロセスです。 Pythonのパッケージインストーラーであるpipを使用して次のコマンドでインストールできます: pip install pycryptodome pip install pycryptodome SHELL コアコンセプトとモジュール PyCryptodomeは暗号化のさまざまな側面に対応する複数のモジュールに整理されています。 これらのモジュールを理解することは、ライブラリを効果的に活用するために重要です。 ハッシング ハッシュ関数は暗号化の基本であり、任意のデータから固定サイズのハッシュ値を生成する方法を提供します。 PyCryptodomeはCrypto.Hashモジュールを通じてさまざまなハッシュアルゴリズムをサポートします。 SHA-256ハッシュ関数の使用例 from Crypto.Hash import SHA256 # Create a new SHA-256 hash object hash_object = SHA256.new(data=b'Hello, PyCryptodome!') # Output the hexadecimal digest of the hash print(hash_object.hexdigest()) from Crypto.Hash import SHA256 # Create a new SHA-256 hash object hash_object = SHA256.new(data=b'Hello, PyCryptodome!') # Output the hexadecimal digest of the hash print(hash_object.hexdigest()) PYTHON 対称暗号化 対称暗号化には、暗号化と復号化の両方に同じ鍵が使用されます。 PyCryptodomeのCrypto.Cipherモジュールは、AES、DESなどを含むいくつかの対称暗号をサポートしています。 AESの暗号化と復号化の例 from Crypto.Cipher import AES from Crypto.Random import get_random_bytes # Generate a random AES key key = get_random_bytes(16) # 16 bytes for AES-128 # Create a new AES cipher in EAX mode for encryption cipher = AES.new(key, AES.MODE_EAX) data = b'Secret Message' # Encrypt the data and get the nonce, ciphertext and tag nonce = cipher.nonce ciphertext, tag = cipher.encrypt_and_digest(data) # Create a new AES cipher in EAX mode for decryption cipher = AES.new(key, AES.MODE_EAX, nonce=nonce) plaintext = cipher.decrypt(ciphertext) # Verify the authenticity of the message try: cipher.verify(tag) print("The message is authentic:", plaintext) except ValueError: print("Key incorrect or message corrupted") from Crypto.Cipher import AES from Crypto.Random import get_random_bytes # Generate a random AES key key = get_random_bytes(16) # 16 bytes for AES-128 # Create a new AES cipher in EAX mode for encryption cipher = AES.new(key, AES.MODE_EAX) data = b'Secret Message' # Encrypt the data and get the nonce, ciphertext and tag nonce = cipher.nonce ciphertext, tag = cipher.encrypt_and_digest(data) # Create a new AES cipher in EAX mode for decryption cipher = AES.new(key, AES.MODE_EAX, nonce=nonce) plaintext = cipher.decrypt(ciphertext) # Verify the authenticity of the message try: cipher.verify(tag) print("The message is authentic:", plaintext) except ValueError: print("Key incorrect or message corrupted") PYTHON 非対称暗号化 非対称暗号化には、暗号化用の公開鍵と復号化用のプライベート鍵のペアが使用されます。 PyCryptodomeのCrypto.PublicKeyモジュールは、RSA、DSA、ECC(楕円曲線暗号)をサポートします。 RSAの暗号化と復号化の例 from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_OAEP # Generate an RSA key pair key = RSA.generate(2048) public_key = key.publickey() # Encrypt the message using the public key cipher = PKCS1_OAEP.new(public_key) ciphertext = cipher.encrypt(b'Secret Message') # Decrypt the message using the private key cipher = PKCS1_OAEP.new(key) plaintext = cipher.decrypt(ciphertext) print(plaintext) from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_OAEP # Generate an RSA key pair key = RSA.generate(2048) public_key = key.publickey() # Encrypt the message using the public key cipher = PKCS1_OAEP.new(public_key) ciphertext = cipher.encrypt(b'Secret Message') # Decrypt the message using the private key cipher = PKCS1_OAEP.new(key) plaintext = cipher.decrypt(ciphertext) print(plaintext) PYTHON 鍵導出 鍵導出関数は、パスワードやパスフレーズから暗号化鍵を生成します。 これはパスワードベースの暗号化で特に役立ちます。 PyCryptodomeはPBKDF2、scrypt、その他の鍵導出アルゴリズムをサポートします。 PBKDF2の使用例 from Crypto.Protocol.KDF import PBKDF2 from Crypto.Random import get_random_bytes # Define a password and generate a salt password = b'my secret password' salt = get_random_bytes(16) # Derive a key from the password and salt using PBKDF2 key = PBKDF2(password, salt, dkLen=32, count=1000000) print(key) from Crypto.Protocol.KDF import PBKDF2 from Crypto.Random import get_random_bytes # Define a password and generate a salt password = b'my secret password' salt = get_random_bytes(16) # Derive a key from the password and salt using PBKDF2 key = PBKDF2(password, salt, dkLen=32, count=1000000) print(key) PYTHON ユースケース パスワード管理 パスワードマネージャは、ユーザーパスワードを安全に保存および取得するために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']) # Verify the authenticity of the password try: cipher.verify(password_data['tag']) print("The stored password is authentic:", plaintext) except ValueError: print("Key incorrect or password corrupted") 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']) # Verify the authenticity of the password try: cipher.verify(password_data['tag']) print("The stored password is authentic:", plaintext) except ValueError: print("Key incorrect or password corrupted") PYTHON IronPDF for Python IronPDFは、開発者がPDFドキュメントを簡単に作成、編集、および操作できる強力なPython用PDF生成ライブラリです。 HTMLをPDFに変換することから、複数のPDFを結合することまで、幅広い機能を提供しており、ドキュメントワークフローの自動化に最適な選択肢です。 PyCryptodomeとの組み合わせにより、暗号化やデジタル署名など、安全な機能をPDF文書に追加することができます。 この統合は、金融、法律、または機密環境など、高いセキュリティとデータの完全性を必要とするアプリケーションに特に役立ちます。 IronPDFのインストールには、Pythonのパッケージマネージャであるpipを使用できます。 開始方法は次のとおりです。 pip install ironpdf pip install ironpdf SHELL インストール後、IronPDFを使用してPDFを作成および操作することができます。 以下は、IronPDFを使用してPDFを作成し、次にPyCryptodomeを使用してそれを暗号化する例を示します: from ironpdf import ChromePdfRenderer from Crypto.Cipher import AES from Crypto.Util.Padding import pad import os # Create a new PDF renderer renderer = ChromePdfRenderer() # Render a URL as a PDF and save it pdfFromUrl = renderer.RenderUrlAsPdf("https://ironpdf.com/") pdfFromUrl.SaveAs("output.pdf") # Function to encrypt a file using AES def encrypt_file(file_name, key): cipher = AES.new(key, AES.MODE_CBC) # Use AES in CBC mode 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) from ironpdf import ChromePdfRenderer from Crypto.Cipher import AES from Crypto.Util.Padding import pad import os # Create a new PDF renderer renderer = ChromePdfRenderer() # Render a URL as a PDF and save it pdfFromUrl = renderer.RenderUrlAsPdf("https://ironpdf.com/") pdfFromUrl.SaveAs("output.pdf") # Function to encrypt a file using AES def encrypt_file(file_name, key): cipher = AES.new(key, AES.MODE_CBC) # Use AES in CBC mode 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は開発者のための暗号化操作を大幅に強化する強力で多様なPythonライブラリであり、アルゴリズムの幅広い選択肢とIronPDFのような他のツールとの簡単な統合を提供します。 認証暗号化モード、対称および非対称暗号化、ハッシュ化、および鍵導出のサポートを含む包括的な機能セットにより、PyCryptodomeは堅牢なセキュリティ対策を必要とする現代のアプリケーションのニーズに応えます。 その使いやすさ、積極的なメンテナンス、および自己完結型の性質により、さまざまなシナリオで安全なデータ処理を実装するための不可欠なツールとなり、パスワード管理から安全なドキュメント生成や暗号化に至るまで、デジタル世界でのデータの完全性と機密性を確保します。 IronPDFのライセンスに関する詳細は、IronPDFライセンスページを参照してください。 さらに探求するには、HTMLをPDFに変換するための徹底したチュートリアルをご覧ください。 Curtis Chau 今すぐエンジニアリングチームとチャット テクニカルライター Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。 関連する記事 更新日 6月 22, 2025 deepstream io(開発者向けのしくみ) この記事では、オープンリアルタイムサーバdeepstreamとIronPDFを使用してPDFを生成する方法を学びます。 詳しく読む 更新日 6月 22, 2025 Imageio Python(開発者向けのしくみ) Imageioがどのように画像を読み書きするために使用できるかを見ていき、後にIron SoftwareのIronPDFを使ってPDFドキュメントを生成する方法についても調べます 詳しく読む 更新日 6月 22, 2025 Igraph Python(開発者向けのしくみ) この記事では、igraphを使用してネットワークグラフを生成し、それらを柔軟で信頼性の高いIronPDFライブラリを使ってPDFファイルに印刷する方法を示します。 詳しく読む PythonでWhisperXを使用してトランスクリプションを行うOpenTelemetry Python(開発者向...
更新日 6月 22, 2025 deepstream io(開発者向けのしくみ) この記事では、オープンリアルタイムサーバdeepstreamとIronPDFを使用してPDFを生成する方法を学びます。 詳しく読む
更新日 6月 22, 2025 Imageio Python(開発者向けのしくみ) Imageioがどのように画像を読み書きするために使用できるかを見ていき、後にIron SoftwareのIronPDFを使ってPDFドキュメントを生成する方法についても調べます 詳しく読む
更新日 6月 22, 2025 Igraph Python(開発者向けのしくみ) この記事では、igraphを使用してネットワークグラフを生成し、それらを柔軟で信頼性の高いIronPDFライブラリを使ってPDFファイルに印刷する方法を示します。 詳しく読む