1

我找到了 Python 包来加密一些数据,并在 python Cryptography 中看到了这一点:

可以使用 Fernet(对称密钥)的密码。为此,您需要通过密钥派生函数(例如 PBKDF2HMAC、bcrypt 或 scrypt)运行密码。

但是,事实证明,密码的工作方式与密钥相同(使用密码/密钥加密/解密)。那么为什么要麻烦使用密码而不是密钥本身呢?

我的意思是为什么不只使用密钥本身:

from cryptography.fernet import Fernet
key = Fernet.generate_key()
token = Fernet(key).encrypt(b"my deep dark secret")
Fernet(key).decrypt(token)
4

1 回答 1

8

密码是人们可以记住的东西,而密钥通常不会被记住,因为它很长(至少 128 位或 32 个字符的十六进制编码)并且应该是真正随机的(与随机噪声无法区分)。如果您想使用密钥加密某些内容,但该密钥不能通过非对称加密传输,而是应该通过电话提供或永远不应该写在任何地方,那么您不能简单地生成一个随机密钥并使用它。您需要有一个密码/密码短语才能从中派生密钥。

示例 1:

像 KeePass 这样的个人密码保险箱需要用于加密/解密的密钥。用户将无法简单地记住该密钥,因此我们有一个更短的密码,可以记住。现在,安全性在于使用慢速密钥派生函数从密码中派生密钥,因此即使它依赖于更短的密码,攻击者仍然难以暴力破解密钥。

示例 2:

您压缩文档并使用压缩软件的加密。现在您可以通过电子邮件发送容器,但不能将密码连同它一起发送。所以,你打电话给你发送电子邮件的人并告诉他们密码。以这种方式,密码比长而随机的密钥更容易传输。

于 2016-07-31T13:19:50.490 回答