首先,我应该说我对编程比较陌生,所以如果这是一个天真或愚蠢的问题,请对我保持温和。
好的,所以我正在编写一个小应用程序,其中一部分将涉及散列用户密码。在研究了最佳方法之后,md5作为一种建议出现,几乎与批评其使用的文章一样多。
替代品类似于SHA-1等,它们更强大,不太可能被破解。这很有道理。
要明白:
答案 0 :(得分:8)
MD5和SHA-1都不应用于散列密码。它们旨在快速计算,这正是您不想要的。如果人们使用这些散列算法来散列密码,可能是因为他们不知道替代品。
相反,您应该使用专门为此目的而设计的bcrypt之类的东西。它可以配置为您需要的计算难度。随着计算机变得越来越快,您可以在计算中添加更多轮次以使其花费更长时间。这会减慢那些抓住哈希并试图使用暴力破解或基于字典的攻击来获取密码的攻击者。
相关强>
答案 1 :(得分:1)
出于同样的原因mysql_*
函数被使用,网上的大多数资源和教程都过时了,导致新手程序员盲目使用它们(因为教程是这样说的!)。
我不怪新程序员,我责怪教程制作者没有更新他们的教程。 Google的搜索算法通常也考虑到年龄,并在搜索结果中显示较旧的条目。
至于替代方案,我相信Mark Byers说它比我能做得更好。
答案 2 :(得分:0)
为什么md5仍广泛用于散列
完全没问题,如果你想要,例如检查程序的有效性(md5你的ISO)。有些人将它用于不应该用于它的东西(不再是)不应该是你关心的,并且是无法回答的:)
我是否应该自动对其进行折扣,或者是否存在其使用实际上比其他散列机制更好的特定用例?
是。如果您将其用于密码,请将其折扣。你已经发现了所有的弱点,但是看看@markbyers关于你应该使用什么的说法,例如: bcrypt
答案 3 :(得分:0)
为什么md5仍然广泛用于散列?
不是。甚至Wordpress几年前也放弃了它。 Wordpress被广泛使用。
我是否应该自动对其进行折扣,或者是否存在其使用实际上比其他散列机制更好的特定用例?
我不知道你的意思。使用适合密码散列的散列算法,您不必担心太多。
答案 4 :(得分:0)
MD5对于大多数情况[*]仍然相当安全,只要你在加密之前使用好的“盐”与实际密码混合使用。
除了暴力之外,还没有其他方法可以在MD5上完成“第一次预映像攻击”,即给定哈希值,找出原始密码是什么。
上面提到的“盐”是必要的,以确保您的加密密码不能在“彩虹表”或其他现有的“要消化的字符串”列表中轻易查找。
最近的Linked-In密码泄漏是盐很重要的一个很好的例子。他们无法限制用户的密码,因此许多密码都被忽略了,因为这些密码的哈希值已经计算好了(在很多情况下是通过谷歌发现的)。
你仍然不应该做的事情是盐很容易确定。如果攻击者可以解决所有盐的问题,那么所有的投注都将被取消,因为Florian发布的文章中描述的强力机制将再次出现。一个好的盐应该很长,你不应该为每个用户使用相同的盐。
当你已经知道原始文件的内容时,到目前为止在MD5中发现的唯一真正的弱点就是生成一个新文件的方法,该文件设法产生与另一个文件相同的MD5摘要。这被称为“第二次预映像攻击”,在考虑使用散列算法进行密码加密时无关紧要。
所有这一切,如果有更好的算法(SHA-2,bcrypt),你也可以使用它!
[*]我不会将MD5用于与电子商务有关的任何事情!