Encryption 如何实现SHA加密? 重复:

Encryption 如何实现SHA加密? 重复:,encryption,hash,Encryption,Hash,当有n个无限数量的可能输入字符串,但只有有限数量的40个字符的散列时,SHA加密如何为任何字符串创建唯一的40个字符的散列?SHA不是一种加密算法,它是一种加密散列算法 SHA不会为任何字符串创建唯一的40个字符的哈希。如果创建足够多的散列,最终会发生冲突(两个输入散列到同一个输出)。SHA和其他散列函数在密码学上的有用之处在于,找不到两个具有相同散列的文件的简单方法 简单的答案是,它不会为任何字符串创建唯一的40个字符的哈希值——不同的字符串将不可避免地具有相同的哈希值 它确实试图确保clos



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

SHA不是一种加密算法,它是一种加密散列算法


SHA不会为任何字符串创建唯一的40个字符的哈希。如果创建足够多的散列,最终会发生冲突(两个输入散列到同一个输出)。SHA和其他散列函数在密码学上的有用之处在于,找不到两个具有相同散列的文件的简单方法

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


它确实试图确保closeby字符串将有非常不同的散列。40个字符是一个相当长的散列,因此冲突的可能性非常低,除非您使用的是荒谬的数字。

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


一般来说,有无限多的消息散列到给定的值,这是正确的。但仍然很难找到答案。

要详细说明jdigital的答案:


因为它是一个哈希算法而不是加密算法,所以不需要反向操作。这反过来意味着结果不必是唯一的;(理论上)有无限多个字符串会导致相同的哈希。不过,要找出那些是什么几乎是不可能的。

观察得不错。简短回答:它不能,并且会导致冲突,这些冲突可以在中利用。

它不能保证两个字符串将具有唯一的40个字符的哈希。它所做的是提供两个字符串具有冲突哈希的极低概率,并且使得在不随机尝试输入的情况下创建两个冲突文档非常困难

一般来说,坏事发生的概率足够低,就等于保证它永远不会发生。只要彗星撞击地球时世界更有可能毁灭,那么碰撞散列的可能性通常就不值得担心


当然,安全哈希算法并不完美。因为它们被用于密码学,所以它们是非常有价值的尝试和破解的东西。例如,SHA-1(你可以用比随机猜测少2000倍的猜测找到碰撞);MD5已经存在,而安全研究人员实际上已经拥有相同的MD5总和,并获得其中一个证书颁发机构的签名,从而允许他们使用另一个证书颁发机构的签名。你不应该盲目地相信密码散列;一旦一个函数被削弱(如SHA-1),就应该寻找一个新的散列,这就是为什么目前需要创建一个新的标准散列算法的原因。

该函数类似于:

hash1 = SHA1(plaintext1)
hash2 = SHA1(plaintext2)
现在,hash1和hash2在技术上是相同的。这是一次碰撞。不常见,但可能,也不是问题

真正的魔力在于不可能做到这一点:

plaintext1 = SHA1-REVERSE(hash1)
所以你永远无法逆转它。如果你不想知道密码是什么,只要用户两次都给你相同的密码就行了。想想看。您有1024字节的输入。你得到40位的输出。你怎么能从你扔掉的40个信息中重建出那1024个字节呢。这是不可能的(好吧,除非你设计了允许它的算法,我想……)

此外,如果40位不够,请使用SHA256或具有更大输出的设备。加盐。盐是好的

哦,顺便说一句:任何给你发送密码电子邮件的网站都不会对密码进行哈希运算。它要么不加密地存储它们(运行,尖叫着运行),要么用双向加密(DES、AES、公钥-私钥等-更信任它们)


网站没有理由通过电子邮件向您发送密码,或者需要存储除散列以外的任何内容/rant.

简单的答案是:它不会创建唯一的散列。看这张照片。发生冲突的可能性是如此之小,以至于从来没有人发现过冲突。

附带问题[请原谅我的加密无知]:这是否意味着两个不同的输入字符串在理论上可以产生相同的哈希值?这是非常不可能的,以至于人们通常认为永远不会发生冲突。重复: