如何进行SHA加密?

时间:2009-04-15 21:25:29

标签: encryption hash

重复:

  

Confused about hashes


当有n个无限数量的可能输入字符串但只有40个字符的哈希值时,SHA加密如何为任何字符串创建唯一的40个字符哈希?

9 个答案:

答案 0 :(得分:23)

SHA不是加密算法,它是加密散列算法。

Check out this reference at Wikipedia

答案 1 :(得分:8)

简单的答案是,它不会为任何字符串创建唯一的40个字符的哈希值 - 不可避免的是,不同的字符串将具有相同的哈希值。

它确实尝试确保close-by字符串具有非常不同的哈希值。 40个字符是一个相当长的哈希值,因此碰撞的可能性非常低,除非你做的是荒谬的数字。

答案 2 :(得分:5)

SHA不会为任何字符串创建唯一的40个字符的哈希值。如果你创建了足够的哈希值,你最终会得到一个冲突(两个输入散列到同一个输出)。使SHA和其他哈希函数在加密方面有用的原因是找不到具有相同哈希值的两个文件是不容易的。

答案 3 :(得分:3)

详细说明jdigital的答案:

由于它是哈希算法而不是加密算法,因此无需反转操作。反过来,这意味着结果不需要是唯一的; (理论上)在无限数量的字符串中会产生相同的散列。但是,找出哪些是实际上不可能的。

答案 4 :(得分:2)

SHA-1或SHA-2系列等哈希算法用作支持基于密码的身份验证的“单向”哈希。找到散列到给定值的消息(密码)在计算上是不可行的。因此,如果攻击者获得散列密码列表,则无法确定原始密码。

您是正确的,通常,有无限数量的消息散列到给定值。但是仍然很难找到一个。

答案 5 :(得分:2)

它不保证两个字符串将具有唯一的40个字符哈希值。它的作用是提供极低的概率,即两个字符串将具有冲突的哈希值,并且使非常困难创建两个冲突的文档而不是随意尝试输入。

通常情况下,发生不良事件的可能性足够低,以及它永远不会发生的保证。只要彗星击中它时世界将更有可能结束,碰撞哈希的可能性通常不值得担心。

当然,安全散列算法并不完美。因为它们用于密码学,所以它们是非常有价值的东西,可以尝试和破解。例如,SHA-1 has been weakened(你可以发现碰撞的猜测次数少于猜测的2000次); MD5已经completely cracked,安全研究人员实际上created two certificates具有相同的MD5总和,并且其中一个由证书颁发机构签名,因此允许他们使用另一个,就好像它已经由证书颁发机构签署。你不应该盲目地信任加密哈希;一旦被削弱(如SHA-1),就应该寻找新的哈希,这就是为什么当前a competition创建一个新的标准哈希算法。

答案 6 :(得分:2)

该功能类似于:

hash1 = SHA1(plaintext1)
hash2 = SHA1(plaintext2)

现在,hash1和hash2可以技术上相同。这是一次碰撞。不常见,但可能,而不是问题。

真正的魔力在于,这是不可能的:

plaintext1 = SHA1-REVERSE(hash1)

所以你永远无法逆转它。如果您不想知道密码是什么,只有用户两次都给您相同的密码,这很方便。想一想。你有1024字节的输入。你得到40位输出。你怎么能从40中重建那些1024字节 - 你把信息扔掉了。这是不可能的(好吧,除非你设计算法允许它,我猜....)

此外,如果40位不够,请使用SHA256或更大输出的东西。加盐吧。盐很好。

哦,作为一个旁边:任何通过电子邮件向您发送密码的网站都没有哈希密码。它要么以未加密的方式存储它们(运行,运行尖叫),要么使用双向加密对它们进行加密(DES,AES,公共私钥等等 - 相信它们 little 更多)

有一个零的原因让网站能够通过电子邮件向您发送密码,或者需要存储除哈希以外的任何内容。 /咆哮。

答案 7 :(得分:0)

很好的观察。简短的回答它不能并导致可以在birthday attacks中利用的冲突。

答案 8 :(得分:0)

简单的答案是:它不会创建唯一的哈希值。看看Pidgeonhole priciple。碰巧没有人发现碰撞的可能性太小了。