我正在使用MD5(无盐)对用户密码进行哈希处理的系统上工作。我想使用SHA-512和salt来更安全地存储密码。

尽管这对于将来的密码很容易实现,但我也想对现有的MD5哈希密码进行改造,最好不要强制所有用户更改其密码。我的想法是仅使用SHA-512和适当的盐来哈希现有的MD5哈希。然后,我可以在数据库中设置一些标志,以指示从纯文本中哈希出哪些密码,以及从MD5哈希中哈希出哪些密码。或者,我可以在验证用户身份时同时尝试两者。甚至只是先用MD5散列新密码,再用SHA-512/salt散列,这样就可以将它们与旧密码一样对待。

以编程方式,我认为这不会成为问题,但是我对加密/散列的知识还不够了解,是否知道我是否通过将SHA-512/盐散列应用于A来以任何方式损害散列的质量已经被MD5散列的密码。我的第一个直觉是,如果有的话,它会变得更强大,一个非常轻便的按键拉伸(stretch)。

我的第二个本能是我真的不知道我在说什么,所以我最好征求意见。有什么想法吗?

最佳答案

用密码原语进行功能组合是危险的,如果可以避免,则不应该这样做。针对您的问题类型的常见解决方案是将两个哈希值都保留在迁移期间,并尽可能使用新的哈希值,并透明地升级旧密码(当您检查密码和密码是否匹配时,使用新算法对其进行重新哈希处理并存储)

如果您有一个基于质询-响应的方案,但是看不到明文密码,那么这将不起作用,但是由于您似乎拥有一个不变的存储盐,因此我假设您的应用程序会进行哈希处理。

关于java - 使用SHA-512和salt哈希MD5哈希密码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10028308/

10-12 14:29
查看更多