我正在创建一个带用户和密码的软件。在身份验证后,用户可以访问一些半公共服务,并加密一些只有用户才能访问的文件。
如果可能的话,必须按原样存储用户。在进行身份验证后,只要软件在运行,用户和密码就会被保存在内存中(我不确定这是否安全)。
问题是如何在潜在不安全的数据库中存储此用户+密码组合?
我不太明白应该暴露什么。
假设我像这样创建了增强的密钥:
salt = 随机32个字符的字符串(可以吗?) key = hash(usr password + salt) for 1 to 65000 do key = hash(key + usr password + salt)
我应该在数据库中存储[明文用户]、[增强的密钥]和[盐]吗?
还有,我应该使用什么来每次都使用新密码来加密(使用AES或Blowfish)一些文件? 我应该生成一个新的盐并使用(程序内存中存储的密码+盐)创建新的增强密钥吗? 如果是这种情况,如果我将加密的文件存储在数据库中,我应该只存储盐。 数据库与存储用户+密码组合的地方相同。
只有当有人可以生成密钥但不知道密码时,该文件才能被解密。对吗?
我使用Python和PyCrypto,但这并不重要,一个通用的例子就足够了。 我已经阅读了一些类似的问题,但它们没有很明确的回答。
非常非常感谢!