Pythonによる鍵導出関数

Barbara Streisand
リリース: 2025-01-16 18:12:11
オリジナル
794 人が閲覧しました

Key derivation function with Python

次の piko チュートリアルへようこそ!

前の記事では、対称データ暗号化に Python を使用する方法を学びました。最後の例は、ユーザーが指定したパスワードを暗号化キーに直接変換する方法です。効果はありますが、推奨される方法ではありません。今日は、推奨される方法であるキー導出関数を学びます。

鍵導出関数

以下に、Python で PBKDF2HMAC キー導出関数を使用する方法の拡張例を示します。

<code class="language-python"># 导入Base64编码的实用程序
import base64
# 导入Fernet
from cryptography.fernet import Fernet
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from cryptography.hazmat.primitives import hashes
# 导入getpass用于安全输入读取
from getpass import getpass
# 读取纯文本密码
plain_text_password: str = getpass(prompt='密码:')
# 将密码转换为字节
password_bytes = plain_text_password.encode('utf-8')
# 演示的一些salt值,在实践中使用安全的随机值
salt = b'\x00' * 16
# 使用PBKDF2HMAC从密码派生安全密钥
kdf = PBKDF2HMAC(
    algorithm=hashes.SHA256(),
    length=32,
    salt=salt,
    iterations=100000
)
# 使用Base64编码派生的密钥
key = base64.urlsafe_b64encode(kdf.derive(password_bytes))
# 使用派生的密钥创建一个Fernet实例
fernet = Fernet(key)
# 要加密的数据
data = b'一些秘密数据'
# 加密数据
encrypted_data = fernet.encrypt(data)
# 解密数据
decrypted_data = fernet.decrypt(encrypted_data)
# 打印解密后的数据
print(f"解密文本:{decrypted_data.decode()}")</code>
ログイン後にコピー

この方法で作成されたキーの安全性が高まるだけでなく、プレーン テキストのパスワードの長さがちょうど 32 バイトである必要もなくなりました。

初心者向けの注意: データを復号化するにはソルトが必要であることに注意してください。

以上がPythonによる鍵導出関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート