使用SHA-512和salt来散列MD5哈希密码?

Jer*_*Orr 9 java security hash sha

我正在使用MD5(无盐)散列用户密码的系统.我想使用SHA-512和盐更安全地存储密码.

虽然这很容易实现以后的密码,但我还想改进现有的MD5散列密码,最好不要强迫所有用户更改密码.我的想法是只使用SHA-512和适当的盐来散列现有的MD5哈希值.然后我可以在数据库中设置一些标志,指示哪些密码是从纯文本中散列出来的,哪些是从MD5散列中散列出来的.或者我可以在验证用户时尝试这两种方法.或者甚至只使用MD5和SHA-512/salt散列新密码,这样它们就可以像旧密码一样处理.

以编程方式,我认为这不会是一个问题,但我不知道加密/散列是否足以通过将SHA-512/salt哈希应用于任何方式来破解哈希的质量.已经MD5哈希的密码.我的第一直觉是,如果有的话,它会更强大,一个非常轻的按键伸展.

我的第二直觉是我真的不知道我在说什么,所以我最好得到建议.有什么想法吗?

men*_*nsi 5

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

如果你有一个基于挑战 - 响应的方案,你不会看到明文密码,但是由于你似乎有一个不会改变的存储盐,我认为你的应用程序会进行散列处理.

  • @JeremiahOrr:想想这个夸张的例子.假设我定义了任何输入M映射为0或1.正如你可能想象的哈希函数,因为输出空间是如此之小,这不是一个加密的安全散列函数.现在施加SHA-256到该散列函数的输出没有帮助(输出将或者是SHA(0)或SHA(1)),因为SHA-256哈希值的输出由第一散列值的输出范围的限制功能. (2认同)