首先,我应该说,我是比较新的编程所以请善待我,如果这是一个幼稚或愚蠢的问题。
好了,我在写一个小的应用程序,其中一部分将涉及散列用户密码的过程。 研究做到这一点的最佳方式后,因为它出现在文章批评它的使用MD5显示为一个建议,几乎同样多的时间。
该方案是其更强大,更不可能被破解SHA-1等的喜欢。 这非常有意义。
要切入正题:
- 为什么MD5仍然被广泛用于散列
- 我应该会自动打折的MD5散列为密码,还是有具体的使用情况下,它的使用实际上要比其他哈希机制更好吗?
首先,我应该说,我是比较新的编程所以请善待我,如果这是一个幼稚或愚蠢的问题。
好了,我在写一个小的应用程序,其中一部分将涉及散列用户密码的过程。 研究做到这一点的最佳方式后,因为它出现在文章批评它的使用MD5显示为一个建议,几乎同样多的时间。
该方案是其更强大,更不可能被破解SHA-1等的喜欢。 这非常有意义。
要切入正题:
既不MD5也不SHA-1应该用于散列的口令。 它们被设计成快速地计算,这是你不想要什么。 如果人们在使用这些散列算法散列密码,很可能是因为他们不知道的替代品。
相反,你应该使用类似bcrypt是为了这个目的而设计的。 它可以被配置为为难以计算,因为你需要。 随着计算机变得更快,你可以只需添加更多的回合计算,使其需要更长的时间。 这将减缓攻击谁得到的哈希值的保持,并尝试使用蛮力或基于字典攻击来获取密码。
有关
出于同样的原因mysql_*
功能的使用,大部分的资源和网络上的教程都是过时的信息,使新手程序员使用它们盲目地(因为教程这么说的!)。
我不怪了新的程序员,我责怪教程制作者没有更新他们的教程。 谷歌的搜索算法也通常需要年龄考虑进去,并显示旧条目在搜索结果中较高的 。
作为替代方案,我相信马克·拜尔斯说,它比我好的人。
为什么MD5仍然被广泛用于散列
这是完全正常的,如果你想例如检查程序的有效性(MD5你的ISO)。 有些人使用它的东西,它不应该被用于(再)不应该是你的事,而且是inanswerable :)
我应该自动打折呢,还是有具体的使用情况下,它的使用实际上要比其他哈希机制更好吗?
是。 如果你正在使用它的密码贴现。 你有媒体链接发现弱点,但看看@markbyers说什么,你应该使用,如bcrypt
为什么MD5仍然被广泛用于哈希?
它不是。 即使WordPress的年前抛弃了它。 和WordPress被广泛使用。
我应该自动打折呢,还是有具体的使用情况下,它的使用实际上要比其他哈希机制更好吗?
我不知道你的意思。 使用散列算法,适用于密码哈希,你不应该需要担心太多。
MD5仍然相当安全的使用在大多数情况下[*],只要您使用一个很好的“盐”之前是加密的实际密码混合英寸
还有完成一个“第一原像攻击”的MD5比蛮力,没有其他已知的方法,即给定一个哈希,找出原始密码了。
上面提到的“盐”是必要的,以确保您的加密密码不能平凡的“彩虹表”或“串消化”的其他现有列表抬头。
最近的链接,在密码泄漏的原因盐是重要的一个很好的例子。 他们没有盐了用户的密码,所以很多密码都平凡逆转,因为这些密码的哈希值已经计算(在通过谷歌找到很多情况下)。
什么,你还是不应该做的,虽然是有本身容易确定的盐。 如果攻击者能够制定出盐是所有的赌注都关闭,因为那时发表弗洛里安的文章中描述的蛮力机制再次可用。 一个好的盐应该是长期的,你不应该使用相同的盐为每一位用户。
在MD5本身迄今为止发现的唯一真正的弱点一直的方式来生产,其管理导致相同的MD5摘要作为另一个文件中,当你已经知道了原始文件的内容的新文件。 这被称为“第二图像前攻击”,并考虑密码加密使用散列算法的时候是无关紧要的。
所有这一切说,如果有更好的算法(SHA-2,bcrypt)是可用的,你还不如用它!
[*]我不会用MD5对与电子商务东西,但!