首頁 >後端開發 >Python教學 >使用Python的金鑰導出函數

使用Python的金鑰導出函數

Barbara Streisand
Barbara Streisand原創
2025-01-16 18:12:11794瀏覽

Key derivation function with Python

歡迎來到下一個pikoTutorial!

在先前的文章中,我們學習如何使用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位元組長。

初學者須知: 請記住,salt對於解密資料是必須的!

以上是使用Python的金鑰導出函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn