【发布时间】:2012-04-19 04:12:59
【问题描述】:
我正在使用一个使用 MD5(无盐)对用户密码进行哈希处理的系统。我想使用 SHA-512 和 salt 更安全地存储密码。
虽然这很容易为将来的密码实施,但我还想改进现有的 MD5 散列密码,最好不要强制所有用户更改密码。我的想法是只使用 SHA-512 和适当的盐来散列现有的 MD5 散列。然后我可以在数据库中设置一些标志,指示哪些密码是从纯文本散列的,哪些是从 MD5 散列中散列的。或者我可以在验证用户时尝试两者。或者甚至只是用 MD5 和 SHA-512/salt 对新密码进行哈希处理,因此它们可以被视为与旧密码相同。
以编程方式,我认为这不会成为问题,但我对加密/散列的了解还不够,无法知道我是否通过应用 SHA-512/salt 以任何方式损害散列的质量散列到已经经过 MD5 散列的密码。我的第一直觉是,如果有的话,它会更强大,一个非常轻的键伸展。
我的第二直觉是我真的不知道我在说什么,所以我最好得到建议。有什么想法吗?
【问题讨论】:
-
SHA-512 对 MD5 的改进很小(例如:
MD5(salt + password)实际上等同于SHA512(salt + password))。像 MD5 和 SHA 系列这样的通用散列函数不是为存储密码而构建的。使用 bcrypt。 -
非常正确。我实际上打算做关键拉伸,但在我的问题中没有说清楚。我最终使用了 PBKDF2,而不是天真地实现我自己的密钥拉伸算法。