Python でパスワードを使用して文字列を安全に暗号化および復号化する方法

Barbara Streisand
リリース: 2024-10-22 21:03:02
オリジナル
168 人が閲覧しました

How to Safely Encrypt and Decrypt Strings Using Passwords in Python?

Python でパスワードを使用した文字列の安全な暗号化と復号化

Python の暗号化ライブラリは、データの暗号化と復号化のための包括的なツールキットです。パスワードを使用して文字列を暗号化するには、堅牢な暗号化を提供し、タイムスタンプ、HMAC 署名、base64 エンコードなどの重要な機能を備えた Fernet クラスを利用できます。

Fernet with Password

<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 でパスワードを直接使用するのは便利ですが、 、パスワードを使用してキーを生成する方が安全です。このアプローチには、キー導出関数を使用してパスワードとソルトから秘密キーを導出することが含まれます。

<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 サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!