パスワードで保護された文字列の安全な暗号化
問題:
Python には組み込みのパスワードを使用して文字列を暗号化および復号化するメカニズム。これは、強力なセキュリティ対策なしでデータの難読化を必要とするシナリオでは問題となる可能性があります。
解決策:
暗号などの暗号ライブラリは、安全な暗号化スキームを提供します。
対称キー暗号化に Fernet を使用する
Fernet は、暗号化を使用するためのベスト プラクティス レシピです。 AES CBC 暗号化と HMAC 署名、タイムスタンプ、バージョン情報を組み合わせてデータを保護します。
<code class="python">from cryptography.fernet import Fernet # Generate a random 32-byte key (securely store it) key = Fernet.generate_key() # Encrypt and decrypt messages using the key def encrypt(message, key): return Fernet(key).encrypt(message.encode()) def decrypt(token, key): return Fernet(key).decrypt(token).decode()</code>
代替アプローチ:
データの隠蔽:
データの整合性が問題でない場合は、base64 エンコードを使用して隠蔽できます。
<code class="python">import base64 def obscure(data): return base64.urlsafe_b64encode(data) def unobscure(obscured): return base64.urlsafe_b64decode(obscured)</code>
データの整合性:
HMAC 署名キーとハッシュ アルゴリズムを使用して署名を計算することで、データの整合性を確保できます。
<code class="python">import hmac import hashlib def sign(data, key, algorithm=hashlib.sha256): return hmac.new(key, data, algorithm).digest() def verify(signature, data, key, algorithm=hashlib.sha256): return hmac.compare_digest(expected, signature)</code>
整合性のある暗号化に AES-GCM を使用
Fernet と同様に、AES- GCM は、ガロア / カウンタ モード ブロック暗号を使用して暗号化と整合性を提供します。
<code class="python">from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes from cryptography.hazmat.backends import default_backend def aes_gcm_encrypt(message, key): # ... (Implementation omitted for brevity) def aes_gcm_decrypt(token, key): # ... (Implementation omitted for brevity)</code>
以上がPython でパスワードで保護された文字列を安全に暗号化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。