Algorithm 加密散列是否提供真正唯一的结果?

Algorithm 加密散列是否提供真正唯一的结果?,algorithm,hash,Algorithm,Hash,我想知道md5、sha1和其他是否返回唯一的值 例如,test的sha1()返回a94a8fe5ccb19ba61c4c0873d391e987982fbbd3,长度为40个字符。因此,大于40个字符的字符串的sha1必须相同(当然是加扰的,因为给定的输入可能包含空格和特殊字符等) 因此,当我们存储用户密码时,他们可以输入原始密码,也可以输入超长密码,没有人知道 这是对的,还是这些散列算法提供了真正独特的结果?我很确定这几乎是不可能的。(注意:你问的是函数,不是函数) 根据定义,它们不可能是独一

我想知道md5、sha1和其他是否返回唯一的值

例如,
test
sha1()
返回
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
,长度为40个字符。因此,大于40个字符的字符串的sha1必须相同(当然是加扰的,因为给定的输入可能包含空格和特殊字符等)

因此,当我们存储用户密码时,他们可以输入原始密码,也可以输入超长密码,没有人知道

这是对的,还是这些散列算法提供了真正独特的结果?我很确定这几乎是不可能的。

(注意:你问的是函数,不是函数)

根据定义,它们不可能是独一无二的。他们需要大量的投入,并减少其规模。显然,它们不能表示它们压缩的所有信息。因此,它们不能提供“真正独特”的结果


然而,它们确实提供了“抗碰撞”的结果。也就是说,他们试图证明两个稍有不同的数据会产生明显不同的散列。

散列算法永远不能保证不同输入的结果不同。这就是为什么哈希总是被用作单向“加密”的原因


但是你必须现实一点,一个160位的散列算法可以有2^160个可能的组合,这是。。。很多(1有48个零)

这些不是加密函数,而是散列函数

根据定义,散列可以使两个不同的字符串发生冲突(映射到相同的值),原因正是您提到的。但这通常不相关,因为:

  • 加密散列(如SHA1)努力使相似字符串的冲突概率(非常非常)低
  • 您无法从散列中推断原始字符串

  • 这两种方法意味着您无法获取散列并轻松生成映射到它的字符串之一。

    SHA1不是加密算法,而是一种加密算法

    您是对的-因为它将任意长输入映射到固定大小的散列,所以可能会发生冲突。但加密散列函数的想法是不可能“按需”创建此类冲突。这就是为什么我们也叫它们单向散列函数

    引述:

    理想的加密哈希函数有四个主要或重要属性:
    *计算任何给定消息的哈希值都很容易,
    *无法找到具有给定哈希的消息,
    *在不更改消息哈希的情况下修改消息是不可行的,
    *用相同的哈希值查找两个不同的消息是不可行的

    (这就是您所指的)不提供唯一的结果。你所指的是所谓的。输入的数量超过输出的数量,因此多个输入必须映射到同一输出。这就是为什么输出散列越长越好,因为映射到输出的输入数量越少


    某些东西必须提供唯一的结果,因为你可以对消息进行加密和解密,然后得到相同的消息。

    它不是唯一的,它只是“足够唯一”@Rex M:记住,它不希望是唯一的,因为如果是唯一的,则意味着直接映射,这意味着它可以反转。这里没有人真正提到,但是sha1是用于密码散列的错误算法,bcrypt更安全。请务必阅读Sam yes you's right(SHA1已死),但您在该链接中的评论形式极为糟糕,IMHO:我建议大家进行审查:并使用NIST(即SHA2系列)批准的算法进行加密。@silky,如果您对重复文件进行首遍搜索,MD5非常好,如果你是散列密码SHA2家庭是坏的,因为它是快速的。bcrypt速度较慢,因此不易受到暴力攻击。