【发布时间】:2018-04-11 13:43:18
【问题描述】:
我一直在使用哈希和 RSA(在非常肤浅的层面上,例如:SSH 连接上的 RSA 身份验证),我想了解更多。
首先,我知道加密是一个可以恢复的双向过程。并且散列是一个单向的过程,是不可逆的。
最后一点对我来说没有意义,如果我使用算法来散列“你好”,不会是相同的算法,而是“反转”(意思是,它“向后”工作),能够再次将该哈希转换为“hello”。
编辑:
感谢@GeorgDangl、@klutt 和Pete Kirkham 指出我根本不理解“不可逆数学”的概念。这些例子真的很有帮助。
【问题讨论】:
-
这是因为您的输入空间(纯文本)大于输出空间(哈希)。这意味着对于每个不同的输出(散列),都有多个输入导致该散列。例如,根据存储的哈希验证密码的服务器可能会接受恰好具有相同哈希输出的不同密码(例如,用于彩虹表的攻击)
-
也许 OP 可以花更多的研究精力,但我认为不需要 DV。这个问题对其他人来说非常清楚和有趣。我投了赞成票。
-
@DiegoS 我很清楚这是微不足道的。事实上,我已经检查过维基百科,但由于它不是查找信息的最佳地点,我检查了其他资源。由于我缺乏知识,我无法辨别真假(又名。过时的信息和/或错误的信息)。这就是我问这个问题的原因。
-
即使输入空间小于输出空间,(加密)哈希也是不可逆的。产生这种情况所需要做的就是故意丢失一些信息,比如忽略整数加法溢出。注意事项:加密哈希是一类特殊的哈希,通常被设计为不可逆和抗冲突的。像字典一样用于快速查找的哈希可能非常简单,并且可能存在大量冲突,可以通过其他方法解决。
-
@zaph 你说的是真的,但我想指出的是,如果输入空间大于输出,那么它总是不可逆的。输入空间较大是不可逆性的充分条件,但不是必要条件。
标签: security encryption hash aes sha