【发布时间】:2011-03-04 20:48:49
【问题描述】:
我想知道 md5、sha1 和其他是否返回唯一值。
例如,sha1() 对应于 test 返回 a94a8fe5ccb19ba61c4c0873d391e987982fbbd3,即 40 个字符长。因此,大于 40 个字符的字符串的 sha1 必须相同(当然是加扰的,因为给定的输入可能包含空格和特殊字符等)。
因此,当我们存储用户的密码时,他们可以输入他们的原始密码或一些无人知道的超长密码。
这是对的吗,或者这些哈希算法是否提供了真正独特的结果 - 我很确定这几乎不可能。
【问题讨论】:
-
它不是独一无二的,它只是“足够独特”
-
@Rex M:请记住,它不想要是唯一的,因为如果它是唯一的,则意味着直接映射,这意味着它可以反转.
-
这里没有人真正提到,但是 sha1 是用于密码散列的错误算法,bcrypt 更安全。请务必阅读stackoverflow.com/questions/800685/…
-
Sam 是的,你是对的(SHA1 已死),但您在该链接中的 cmets 格式非常糟糕,恕我直言:我建议人们审查:valerieaurora.org/hash.html 并使用 NIST 批准的算法(即 SHA2 系列)用于加密目的。
-
@silky,如果您正在对重复文件进行第一次搜索,MD5 非常好,如果您正在对密码进行哈希处理,则 SHA2 系列不好,因为它很快。 bcrypt 很慢,这使得它不太容易受到暴力攻击。