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

问题描述 投票:1回答:2

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

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

最后一点对我来说没有意义,如果我使用一个算法来散列“hello”,就不会使用相同的算法,而是“反转”(意思是,它可以“向后”工作),能够转换那个哈希值再次“打招呼”。

编辑:

感谢@GeorgDangl,@ klutt和Pete Kirkham指出我根本不理解“不可逆数学”的概念。这些例子非常有用。

security encryption hash aes sha
2个回答
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都是如此。但是,在这个例子中,你得到一个有限(也很小)的可能答案。

在处理加密时,可以说私钥用于选择正确的解决方案。您可以随时轻松地解密加密的邮件,但您将获得大量可能的答案。密钥用于找到正确的密钥,而不是实际解密。


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是整数。

© www.soinside.com 2019 - 2024. All rights reserved.