我正在寻找一种使用短密钥/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.
1条答案
按热度按时间wgx48brx1#
您不清楚“所需长度”是什么意思。SHA-256创建一个32字节的哈希值(没有您添加的十六进制编码)。您只需要对它进行base64 url编码,* 如错误描述所示 *。
PIN不适合用于加密目的,因为尝试所有可能的PIN值并尝试解密存储的密码太容易了。如果您使用正常强度的密码来加密另一个密码(这似乎适得其反,但是嘿),那么SHA-256也不安全,您必须使用PBKDF(如PBKDF 2)来增强密码。