繁体   English   中英

Python,Fernet 加密,用salt 作为第二个密码?

[英]Python, Fernet encryption, use salt as a second password?

我遵循了一个简单的指南来加密来自https://nitratine.net/blog/post/encryption-and-decryption-in-python/的密码

import base64
import os
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC

password_provided = "password" # This is input in the form of a string
password = password_provided.encode() # Convert to type bytes
salt = b'salt_' # CHANGE THIS - recommend using a key from os.urandom(16), must be of type bytes
kdf = PBKDF2HMAC(
    algorithm=hashes.SHA256(),
    length=32,
    salt=salt,
    iterations=100000,
    backend=default_backend()
)
key = base64.urlsafe_b64encode(kdf.derive(password)) # Can only use kdf once

我的问题是:我可以使用 salt 作为第二个密码吗? 为了生成密钥和解密消息,用户必须同时输入密码和盐。 这是安全和良好的做法吗?

不,不是真的,因为用户很可能在类似情况下使用相同的密码组合。 这使得比较相同的哈希成为可能。 创建一个好的安全密码比要求两个要好得多,因为如果您要求两个,大多数用户会很生气。

至于例如防止彩虹表:如果密码足够独特,那么它将有助于防止彩虹表。 但正如我所指出的,我认为这不是一个好习惯。 请保持盐和密码分开。

如果您想使用 salt 从同一个 PBKDF 创建多个密钥,那么我建议您在 PBKDF 的输出上使用单独的基于密钥的 KDF。 HKDF 或 HKDF-Expand 最有意义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM