python-3.x 存储用网络加密的密码和由任何文本生成的密钥,

nzrxty8p  于 2023-01-14  发布在  Python
关注(0)|答案(1)|浏览(160)

我正在寻找一种使用短密钥/pin加密主密码并每次使用此pin解密的方法。我尝试从用户给定的短密钥生成散列(sha 256)并将散列截断到所需长度,将其解码为字节码并用作Fernet
代码段:

pin = self.pin_ent.get()
key: str = hashlib.sha256(pin.encode()).hexdigest()[10:-10]
f = Fernet(key.decode())

但是python会出现错误

ValueError: Fernet key must be 32 url-safe base64-encoded bytes.
wgx48brx

wgx48brx1#

您不清楚“所需长度”是什么意思。SHA-256创建一个32字节的哈希值(没有您添加的十六进制编码)。您只需要对它进行base64 url编码,* 如错误描述所示 *。
PIN不适合用于加密目的,因为尝试所有可能的PIN值并尝试解密存储的密码太容易了。如果您使用正常强度的密码来加密另一个密码(这似乎适得其反,但是嘿),那么SHA-256也不安全,您必须使用PBKDF(如PBKDF 2)来增强密码。

相关问题