PHP前端开发

使用Python的密钥导出函数

百变鹏仔 4小时前 #Python
文章标签 密钥

欢迎来到下一个 pikotutorial!

在之前的一篇文章中,我们学习了如何使用 python 执行对称数据加密。最后一个示例是将用户提供的密码直接转换为加密密钥。尽管它有效,但这不是推荐的方法。今天给大家推荐一个密钥导出函数。

密钥导出函数

下面您可以找到如何在 python 中使用 pbkdf2hmac 密钥导出函数的扩展示例:

# import utility for Base64 encodingimport base64# import Fernetfrom cryptography.fernet import Fernetfrom cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMACfrom cryptography.hazmat.primitives import hashes# import getpass for secure input readingfrom getpass import getpass# read plain text passwordplain_text_password: str = getpass(prompt='Password: ')# convert the password to bytespassword_bytes = plain_text_password.encode('utf-8')# some salt value for demonstration, use a secure random value in practicesalt = b'' * 16# use PBKDF2HMAC to derive a secure key from the passwordkdf = PBKDF2HMAC(    algorithm=hashes.SHA256(),    length=32,    salt=salt,    iterations=100000)# encode the derived key with Base64key = base64.urlsafe_b64encode(kdf.derive(password_bytes))# create a Fernet instance with the derived keyfernet = Fernet(key)# data to be encrypteddata = b'Some secret data'# encrypt the dataencrypted_data = fernet.encrypt(data)# decrypt the datadecrypted_data = fernet.decrypt(encrypted_data)# print the decrypted dataprint(f"Decrypted text: {decrypted_data.decode()}")

以这种方式创建的密钥不仅更安全,而且不再要求纯文本密码长度恰好为 32 个字节。

初学者注意事项:记住加盐是解密数据所必需的!