哈希真的是一个不可逆转的过程吗?

时间:2017-10-30 14:22:49

标签: security encryption hash aes sha

我一直在使用哈希和RSA(在非常肤浅的层面上,例如:SSH连接上的RSA身份验证),我想了解更多相关信息。

首先,我知道加密是一个可以恢复的双向过程。哈希是一个不可逆转的单向过程。

最后一点对我来说没有意义,如果我使用算法来哈希"你好",不会使用相同的算法,但是"反转&#34 ;(意思是,它起作用"向后"),能够将该哈希转换为"你好"试。

编辑:

感谢@GeorgDangl,@ klutt和Pete Kirkham指出我并不理解"不可逆转的数学"。这些例子非常有用。

2 个答案:

答案 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=1x=-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是整数。