SHA不是加密算法,而是一种密码散列算法。
SHA不会为任何字符串创建唯一的40个字符哈希。如果您创建足够多的哈希,最终会发生冲突(两个输入的哈希值相同)。使SHA和其他哈希函数具有加密用途的是没有简单的方法可以找到两个具有相同哈希值的文件。
对jdigital的回答进行详细说明:
由于这是一个哈希算法而不是加密算法,因此没有必要反转操作。这又意味着结果不需要唯一;理论上有无限数量的字符串将导致相同的哈希值。不过,实际上找出哪些是相同的几乎是不可能的。
hash1 = SHA1(plaintext1)
hash2 = SHA1(plaintext2)
现在,hash1和hash2在技术上可以是相同的。这是一种碰撞。虽然不常见,但可能发生,并且不会造成问题。
真正的魔力在于无法做到这一点:
plaintext1 = SHA1-REVERSE(hash1)
像SHA-1或SHA-2家族这样的哈希算法用作基于密码的身份验证中的"单向"哈希。计算上不可行找到一个消息(密码)的哈希值。因此,如果攻击者获得了哈希密码列表,他们无法确定原始密码。
您是正确的,一般来说,有无限数量的消息可以哈希到给定值。但要找到其中一个仍然很困难。