如果密码学是一个主体,它的哈希算法就是它的核心。如果加密是一辆汽车,它的哈希算法就是它的引擎。如果加密是一部电影,它的哈希算法就是明星。如果密码学是太阳系,它的哈希算法将是太阳。好吧,那可能太过分了,但你明白了,对吗?在我们得到散列算法的原因之前,为什么它在那里,以及它是如何工作的,重要的是要了解其螺栓和螺栓的位置。让我们从哈希开始吧。
什么是哈希?
让我们试着想象一下这里的假设情况。假设您要向某人发送消息/文件,绝对必须以完全相同的格式到达其预期的收件人。你会怎么做?一种选择是多次发送并验证它没有被篡改。但是,如果消息太长了怎么办?如果文件以千兆字节为单位怎么办?完全是荒谬的,不切实际的,而且坦率地说,无聊地验证每一封信,对吧?好吧,这就是哈希发挥作用的地方。
使用选择的散列算法,数据被压缩为固定大小。让我们通过一个例子来理解这一点。如果我们接受句子“驴子活很长时间”并将joaat哈希算法应用于它,我们将得到6e04f289。该值称为哈希值。
当您想要识别或比较文件或数据库时,哈希非常方便。与其比较原始形式的数据,计算机比较哈希值要容易得多。无论是存储密码,计算机图形还是SSL证书,哈希都能做到这一切。
从根本上说,散列是由两个截然不同的特征定义的 - 不可逆性和唯一性。不可逆性指出这样一个事实:一旦你对某些东西进行散列,就无法回头了。与加密和编码不同,您无法轻松解除消息/数据的散列。唯一的,因为对于两个不同的数据,没有两个哈希值是相同的。如果发现两个哈希值对于两个不同的数据是相同的,则称为“哈希冲突”,并且该算法变得无用。
(注意:我们在这里使用了joaat哈希算法,因为它简短易懂。现代算法要复杂得多,而且时间长。)
哈希函数:哈希算法的核心
“每个成功男人的背后,都有一位伟大的女人。” - 格劳乔·马克思
“在每个成功的哈希算法的背后,都有一个很好的哈希函数。” - 我们就是这样做的。
让我们把笑话放在一边,专注于问题的关键。哈希函数是一种数学函数,它将输入值转换为压缩数值 - 哈希值或哈希值。基本上,它是一个处理单元,它接收任意长度的数据并为您提供固定长度的输出 - 哈希值。
输出或散列的长度取决于散列算法。一般而言,最流行的散列算法或函数具有160到512位的散列长度。
现在,让我们继续讨论你一直在等待的部分。
什么是哈希算法?它是如何工作的?
正如我们所讨论的,散列函数位于散列算法的核心。但是,要获得预设长度的哈希值,首先需要将输入数据划分为固定大小的块。这是因为散列函数接收固定长度的数据。这些块称为“数据块”。这在下图中进行了说明。
数据块的大小因算法而异。但对于特定的算法,它仍然是相同的。例如,SHA-1仅以512位的块接收消息/数据。因此,如果消息完全是512位长度,则哈希函数仅运行一次(在SHA-1的情况下为80轮)。类似地,如果消息是1024位,则将其分成两个512位的块,并且哈希函数运行两次。但是,99%的时间,消息不会是512位的倍数。对于这种情况(几乎所有情况),使用称为填充的技术。使用填充技术,整个消息被分成固定大小的数据块。散列函数重复与数据块的数量一样多的次数。这就是它的完成方式:
如上所示,一次处理一个块。第一数据块的输出作为输入与第二数据块一起馈送。因此,第二个输出与第三个块一起输入,依此类推。因此,我们将最终输出作为所有块的组合值。如果在消息中的任何位置更改一位,则整个哈希值会更改。这被称为“雪崩效应”。
流行的哈希算法
(1)消息摘要(MD)算法
(2)安全散列算法(SHA)
(3)RACE Integrity Primitives评估消息摘要(RIPEMD)
(4)涡流
(5)RSA
本文分享自 nginx遇上redis 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!