
Python でパスワードを使用した文字列の安全な暗号化と復号化
Python の暗号化ライブラリは、データの暗号化と復号化のための包括的なツールキットです。パスワードを使用して文字列を暗号化するには、堅牢な暗号化を提供し、タイムスタンプ、HMAC 署名、base64 エンコードなどの重要な機能を備えた Fernet クラスを利用できます。
Fernet with Password
1 2 3 4 5 6 7 8 9 10 | <code class = "python" >from cryptography.fernet import Fernet, FernetException
password = 'mypass'
fernet = Fernet(password.encode())
encrypted_message = fernet.encrypt(b 'John Doe' )
decrypted_message = fernet.decrypt(encrypted_message)
print (encrypted_message) # Encrypted string
print (decrypted_message.decode()) # 'John Doe' </code>
|
ログイン後にコピー
Fernet は、複数の暗号化層を適用し、HMAC 署名によるメッセージの整合性を確保することで、暗号化されたデータを安全に保ちます。
Fernet のパスワード導出キー生成
Fernet でパスワードを直接使用するのは便利ですが、 、パスワードを使用してキーを生成する方が安全です。このアプローチには、キー導出関数を使用してパスワードとソルトから秘密キーを導出することが含まれます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <code class = "python" >import secrets
from cryptography.fernet import Fernet
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
backend = default_backend()
salt = secrets.token_bytes(16) # Generate a unique salt
password = 'mypass' .encode() # Convert password to bytes
kdf = PBKDF2HMAC(
algorithm=hashes.SHA256(), length=32, salt=salt, iterations=100000,
backend=backend
)
key = b64e(kdf.derive(password)) # Derive the secret key
fernet = Fernet(key)
encrypted_message = fernet.encrypt(b 'John Doe' )</code>
|
ログイン後にコピー
この方法では、パスワードから導出された強力なキーを使用して暗号化プロセスに追加の保護層を追加することで、セキュリティが強化されます。
その他の暗号化アプローチ
Fernet 以外にも、特定の要件に応じて代替手段を検討できます:
Base64 隠蔽: 基本用難読化、base64 エンコードは暗号化なしで使用できます。ただし、これは実際のセキュリティを提供するものではなく、単に隠蔽するだけです。
HMAC 署名: データの整合性が目標の場合は、HMAC 署名を使用してデータが改ざんされていないことを確認します。
AES-GCM 暗号化: AES-GCM は、ガロア/カウンター モード ブロック暗号化を使用して暗号化と整合性保証の両方を提供します。これは Fernet に似ていますが、ユーザー フレンドリーな機能はありません。
以上がPython でパスワードを使用して文字列を安全に暗号化および復号化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。