我想知道md5,sha1和anothers是否会返回唯一值。
例如,sha1()
的{{1}}会返回test
,长度为40个字符。因此,对于大于40个字符的字符串,sha1必须相同(当然它是乱码的,因为给定的输入可能包含空格和特殊字符等。)
由于这个原因,当我们存储用户的密码时,他们可以输入他们的原始密码或一些超级密码,没人知道。
这是正确的,还是这些哈希算法提供了非常独特的结果 - 我很确定这几乎不可能。
答案 0 :(得分:13)
(注意:您询问的是hashing个功能,而不是encryption。)
根据定义,它们不可能是独一无二的。他们需要大量投入并减小其规模。因此,很明显,它们无法代表他们压缩的所有信息。所以不,他们不提供“真正独特”的结果。
然而,他们做提供的是“抗冲突”结果。即他们试图表明两个略有不同的数据会产生明显不同的哈希值。
答案 1 :(得分:10)
Hashing algorithms(这是您所指的)不提供独特的结果。你所指的是Pigeonhole Principle。输入数量超过输出数量,因此必须将多个输入映射到同一输出。这就是为什么输出散列越长越好,因为映射到输出的输入数量较少。
Encrypting必须提供独特的结果,因为您可以对邮件进行加密并对其进行解密并获取相同的邮件。
答案 2 :(得分:4)
SHA1不是加密算法,而是cryptographic hash function。
你是对的 - 因为它将任意长输入映射到固定大小的散列,可能会发生冲突。但是加密哈希函数的想法是不可能“按需”创建这样的冲突。这就是我们称之为单向散列函数的原因。
引用(source):
理想的加密散列函数有四个主要或重要的属性:
*很容易计算任何给定消息的哈希值,
*找到具有给定哈希值的消息是不可行的 *修改消息而不改变其散列是不可行的 *找到具有相同散列的两个不同消息是不可行的。
答案 3 :(得分:1)
哈希算法永远不会保证不同输入的结果不同。这就是为什么散列总是被用作单向“加密”的原因。
但是你必须要现实,160位哈希算法可以有2 ^ 160种可能的组合,这是......很多! (1有48个零)
答案 4 :(得分:1)
这些不是加密函数,而是哈希函数。
根据定义,哈希可能会有两个不同的字符串冲突(映射到相同的值),原因就在于您提到的原因。但这通常不相关,因为:
这两个意味着您无法获取哈希并轻松生成映射到其中的一个字符串。