【发布时间】:2011-08-28 19:38:25
【问题描述】:
我正在使用用户+密码创建一个软件。认证后,用户可以访问一些半公共服务,但也可以加密一些只有用户才能访问的文件。
如果可能,用户必须按原样存储,不得修改。认证后,只要软件在运行,用户和密码就会一直保存在内存中(我也不知道这样行不行)。
问题是我应该如何将这个用户+密码组合存储在一个可能不安全的数据库中?
我真的不明白我应该暴露什么。
假设我创建了一个这样的增强密钥:
salt = 随机 32 个字符的字符串(可以吗?) 密钥 = 哈希(用户密码 + 盐) 对于 1 到 65000 做 key = hash(key + usr 密码 + salt)我应该将[明文用户]、[增强密钥]和[盐]存储在数据库中吗?
另外,我应该使用什么来加密(使用 AES 或 Blowfish)每次使用新密码的一些文件? 我应该生成一个新的盐并使用(存储在程序内存中的密码+盐)创建一个新的增强密钥吗? 在这种情况下,如果我将加密文件存储在数据库中,我可能应该只存储盐。 数据库与我存储用户+密码组合的位置相同。
只有在有人可以生成密钥但不知道密码的情况下才能解密文件。对吧?
我将 Python 与 PyCrypto 一起使用,但这并不是很重要,一个一般的例子就可以了。 我读过一些类似的问题,但不是很明确。
非常感谢!
【问题讨论】: