我一直在使用哈希和RSA(在非常肤浅的层面上,例如:SSH连接上的RSA身份验证),我想了解更多相关信息。
首先,我知道加密是一个可以恢复的双向过程。哈希是一个不可逆转的单向过程。
最后一点对我来说没有意义,如果我使用算法来哈希"你好",不会使用相同的算法,但是"反转&#34 ;(意思是,它起作用"向后"),能够将该哈希转换为"你好"试。
编辑:
感谢@GeorgDangl,@ klutt和Pete Kirkham指出我并不理解"不可逆转的数学"。这些例子非常有用。
答案 0 :(得分:4)
在某种意义上说,对于每个输入,您只有一个输出,而不是相反的输出,这是不可逆转的。有多个输入产生相同的输出。
对于任何给定的输入,有很多(实际上是无限的)不同的输入会产生相同的哈希值。这很容易实现,因为输出具有固定的大小,但输入没有大小限制。
为实现这一目标,使用了不可逆的数学运算。例如,很容易计算10%3
。答案就是10%3=1
。但如果我给你方程x%3=1
,你会怎么做?这个等式适用于所有x=3*k+1
。因此,你不能得到我开始的数字。
不可逆数学的另一个例子是正弦和余弦。例如,cos(0)=1
,但有更多输入值的计算结果为1.实际上,cos(n*2pi)=1
。这些函数有“反转”,但它们要么在某个范围内给出答案,要么给出多值答案。第三个例子是x²=1
。对于x=1
和x=-1
都是如此。但是,在这个例子中,你得到一个有限(也很小)的可能答案。
在处理加密时,可以说私钥用于选择正确的解决方案。您可以随时轻松地解密加密的邮件,但您将获得大量可能的答案。密钥用于找到正确的密钥,而不是实际解密。
答案 1 :(得分:3)
琐碎的例子 - 说对于我们不可逆转的函数,我们取输入的数字并返回模7的值。
hash( 0) => 0
hash( 1) => 1
hash( 2) => 2
hash( 3) => 3
hash( 4) => 4
hash( 5) => 5
hash( 6) => 6
hash( 7) => 0
hash( 8) => 1
hash( 9) => 2
hash(10) => 3
hash(12) => 4
hash(13) => 5
hash(14) => 6
因此,如果哈希值为6,则不知道输入是6还是14,还是6 + 7 * N的任何值,其中N是整数。