512和盐散列一个MD5哈希密码?
我正在研究一个使用MD5(无盐)散列用户密码的系统。 我想使用SHA-512和盐更安全地存储密码。
虽然这很容易实现未来的密码,但我还想改进现有的MD5散列密码,最好不要强迫所有用户更改其密码。 我的想法是只使用SHA-512和适当的盐来散列现有的MD5散列。 然后,我可以在数据库中设置一些标志,指明哪些密码是从纯文本进行散列的,哪些是从MD5哈希散列的。 或者我可以在验证用户时尝试这两种方法。 甚至可以用MD5和SHA-512 / salt对新密码进行哈希处理,这样就可以将它们视为旧密码。
以编程方式,我不认为这会是一个问题,但我不太了解加密/散列,以便通过将SHA-512 / salt散列应用于散列来以任何方式破坏散列的质量已经MD5散列的密码。 我的第一个直觉是,如果有的话,它会更强大,一个非常轻松的关键。
我的第二个直觉是,我不知道我在说什么,所以我最好得到建议。 有什么想法吗?
具有密码原语的函数组合是危险的,如果可以避免的话不应该完成。 针对您的问题类型的常见解决方案是在迁移期间保留两个散列,尽可能使用新的散列,并透明地升级旧密码(当您检查密码并匹配时,使用新算法重新刷新并存储它)
如果你有一个基于挑战 - 响应的方案,而你不能看到明文密码,这将不起作用,但由于你似乎有一个不会改变的存储盐,我假设你的应用程序做了散列。
如果您先用MD5进行哈希处理,则只会传播MD5(128位)。 SHA512的大部分空间不会被您的密码覆盖。 所以你没有利用SHA512,但它不会比MD5差。
如果有人获得了SHA512哈希并且不知道salt(这一点你必须以某种方式强制执行),你将得到的好处是无法查找哈希值并获取密码 - 这对于您拥有的MD5数据库来说是可能的现在。
所以是的,你可以重新调整现有的MD5密码。 但正如第一段所述,将MD5应用于所有新密码并将它们散列为SH512将是一个不好的主意。 一个简单的实现是在散列旁边的数据库中有一个布尔型的'salted'字段(但不要把salt放在那里)。
相信你的第二本能。 使用专门用于散列密码的现有库,而不是尝试自己制作密码。
大概用MD5来散列你的新密码,然后用你的密码散列库对MD5进行散列。 这样,您可以保持与旧密码的向后兼容性。
即password_hash(所有旧的,md5的密码)和password_hash(md5(新密码))
(警告:我不是密码学专家)
http://www.codinghorror.com/blog/2007/09/youre-probably-storing-passwords-incorrectly.html
链接地址: http://www.djcxy.com/p/21573.html