Python は Web 開発において重要な言語の 1 つとなっており、暗号化および復号化技術は Web 開発に不可欠な部分です。この記事ではPythonにおける暗号化と復号化のテクニックを紹介します。
Web 開発では、特に機密データを送信する必要がある場合、データ セキュリティが常に重要です。したがって、データを保護し、正当なユーザーのみがデータにアクセスしたり処理したりできるようにする、暗号化および復号化テクノロジが登場しました。
簡単に言うと、暗号化とは、元のデータを特定の暗号化アルゴリズムによって解読不可能な暗号文に変換することであり、復号化とは、その暗号文を元のデータに戻すことです。暗号化と復号化には特定のキーを使用する必要があり、このキーを習得した人のみが暗号化または復号化操作を実行できます。
Python には、AES、DES、RSA など、多くの暗号化および復号化アルゴリズムがあります。以下に、一般的に使用されるいくつかのアルゴリズムを簡単に紹介します。
(1)AES
AES (Advanced Encryption Standard) は、データ送信のセキュリティを保護できる高度な暗号化標準アルゴリズムです。 AES は対称暗号化アルゴリズムであり、暗号化と復号化の際に同じキーが使用されることを意味します。 AES 暗号化アルゴリズムはブロック暗号設計を採用しており、鍵の長さごとに標準的なブロック長があり、一般的に使用されるのは 128 ビット、192 ビット、256 ビットです。
AES 暗号化および復号化操作に Python を使用する場合、pycryptodome ライブラリの AES モジュールまたは暗号化ライブラリの fernet モジュールを使用できます。
(2) RSA
RSA は、暗号化用の公開キーと復号化用の秘密キーの 2 つのキーを使用する非対称暗号化アルゴリズムです。 RSA アルゴリズムのセキュリティは、素因数分解の難易度によって決まります。通常、キーの長さは 1024 ビットまたは 2048 ビットです。
RSA 暗号化および復号化操作に Python を使用する場合、pycryptodome ライブラリの RSA モジュールまたは暗号化ライブラリの rsa モジュールを使用できます。
(3)DES
DES (Data Encryption Standard) は、データを 64 ビットのブロックに分割し、暗号化に 56 ビットのキーを使用する対称暗号化アルゴリズムです。 DES は安全でないと考えられているため、現在は一般的に使用されていません。
pycryptodome ライブラリの DES モジュールを使用して、Python で DES 暗号化および復号化操作を実行することもできます。
Python では、さまざまなライブラリとモジュールを使用して暗号化と復号化の操作を実行できます。以下では、例を使用して共通ライブラリの使用法を紹介します。
(1) pycryptodome を使用して AES 暗号化と復号化を実装する
pycryptodome は、暗号化と復号化の操作に必要なさまざまなモジュールを提供できる Python パッケージです。次の例は、AES 暗号化と復号化に pycryptodome を使用する方法を示しています。
from Crypto.Cipher import AES from Crypto.Util.Padding import pad, unpad import base64 def encrypt_aes(data, key): cipher = AES.new(key.encode('utf-8'), AES.MODE_CBC) cipher_text = cipher.encrypt(pad(data.encode('utf-8'), AES.block_size)) iv = base64.b64encode(cipher.iv).decode('utf-8') cipher_text = base64.b64encode(cipher_text).decode('utf-8') return iv, cipher_text def decrypt_aes(iv, cipher_text, key): cipher = AES.new(key.encode('utf-8'), AES.MODE_CBC, base64.b64decode(iv.encode('utf-8'))) plain_text = unpad(cipher.decrypt(base64.b64decode(cipher_text.encode('utf-8'))), AES.block_size) return plain_text.decode('utf-8')
上記のコードでは、pycryptodome の AES モジュールと Padding モジュールを使用して、暗号化と復号化の操作を実行します。 AES モジュールはキーと初期化ベクトル (CBC モードの場合) を受け取り、暗号化する前にパッド関数を使用してデータを AES ブロック サイズの整数倍にパディングします。復号化の際、AES モジュールはキー、初期ベクトル、暗号文の受信にも使用され、unpad 関数は復号化されたデータからパディングを削除するために使用されます。
(2) 暗号化を使用して RSA 暗号化と復号化を実装する
cryptography は、Python の強力な暗号化ライブラリであり、さまざまな暗号化アルゴリズムが含まれています。次の例は、RSA 暗号化と復号化に暗号化を使用する方法を示しています。
from cryptography.hazmat.primitives.asymmetric import rsa, padding from cryptography.hazmat.primitives import serialization, hashes def generate_rsa_key(): private_key = rsa.generate_private_key( public_exponent=65537, key_size=2048 ) return private_key, private_key.public_key() def encrypt_rsa(data, public_key): data = data.encode('utf-8') cipher_text = public_key.encrypt( data, padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None ) ) return cipher_text def decrypt_rsa(cipher_text, private_key): plain_text = private_key.decrypt( cipher_text, padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None ) ) return plain_text.decode('utf-8')
上記のコードでは、RSA キーの生成、暗号化、復号化などの操作を提供する暗号化の非対称モジュールを使用しています。秘密鍵と公開鍵を生成するときは、generate_private_key 関数を使用して、公開指数 (通常は 65537) と鍵の長さ (通常は 2048 ビット) を指定します。
暗号化する際には、公開鍵の暗号化機能を使用し、パディングモードやハッシュアルゴリズムなどのパラメータを指定します。復号化する際には秘密鍵の復号化機能を使用し、パディングモードやハッシュアルゴリズムなどのパラメータも指定します。暗号化および復号化操作に暗号化を使用する場合、キーとデータの両方でバイト型を使用する必要があることに注意してください。
この記事では、Python の一般的な暗号化および復号化アルゴリズムと、暗号化および復号化操作にさまざまなライブラリとモジュールを使用する方法を紹介します。 Web 開発において、暗号化と復号化はデータのセキュリティを確保するための重要な手段の 1 つです。
以上がPython Web開発における暗号化および復号化のスキルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。