使用主密钥进行Python加密

0 投票
2 回答
1752 浏览
提问于 2025-04-18 18:56

我需要把一些敏感数据放到一个数据库里,这个数据库是我们组织里所有人都能看到的。我想先把数据加密,然后再放到一个文本字段里。用户通过一个图形界面可以访问这些数据,界面会要求用户输入一个密码,这个密码会用来加密和解密数据。

我不太相信用户能记住他们的密码,所以我想有一个主密钥,这个密钥可以解密所有的数据。

我觉得唯一可行的方法是用对称密钥来加密数据,同时用公钥加密一份密码的副本。然后可以用私钥来解密对称密钥,这样即使用户丢了他们的密钥,也能解密数据。

这样做合理吗?还是说我把事情搞得太复杂了?

我会用Python来实现这个。看了其他帖子,似乎Pycrypto是我应该关注的库。这对吗?

谢谢!

2 个回答

0

如果协议没有严格要求,你绝对不应该对密码进行加密。

你可以考虑这样做:

  1. 为每个字段创建一个随机的对称密钥
  2. 用一个主公钥加密这个密钥(主私钥要妥善保管,比如可以放在一个安全的地方)
  3. 用从密码中生成的对称用户密钥加密这个密钥,生成用户密钥的过程可以使用PBKDF2
  4. 用这个对称密钥加密数据
  5. 把对称密钥和主公钥、用户密钥、PBKDF2所需的盐值(如果可能的话,前面加上协议的版本指示)以及密文一起存储

现在,你只需要制定一个流程,来处理用户忘记密码的情况。这需要设置一个新密码并找回数据。

0

我觉得这个方法会导致设计变得复杂,这样在扩展和维护的时候会更加麻烦。

更好的方法是使用对称密钥来存储和获取数据库中的敏感数据。用户可以输入他们的密钥,然后数据就可以被解密或加密。这个链接会帮助你实现这个功能。

撰写回答