一、哈希算法是什么

哈希算法,英文名为 Hash Algorithm,也被叫做散列算法。从原理上来说,它是一种将任意长度的输入(也叫消息),通过特定的数学变换,映射成固定长度输出值(即哈希值,也被叫做散列值、摘要)的函数。
为了更形象地理解,我们可以把哈希算法想象成一个神奇的'搅拌机'。不管你扔进去的是一部超长的电影、一篇百万字的小说,还是仅仅一个数字、一个字母,这个'搅拌机'都能按照独特的'搅拌方式'(也就是特定的数学运算规则),把它们加工成固定长度的'碎末',这些'碎末'就是哈希值。比如,无论你放入搅拌机的是 100MB 的图片文件,还是 1GB 的视频文件,最终得到的哈希值长度都是固定的,就好像不管是大西瓜还是小苹果,放进这个特殊搅拌机后,出来的碎末都是一样大小的颗粒。
二、哈希算法的特点
哈希算法之所以能在众多领域发挥关键作用,是由它的几个重要特点决定的。
(一)不可逆性
哈希算法具有不可逆性,这意味着从哈希值几乎无法反向推导出原始数据。就好比你把一堆彩色积木搭成了一个漂亮的城堡,然后把这个城堡放进了一个神秘的'粉碎器'(哈希算法),出来的是一堆杂乱无章的小颗粒(哈希值)。此时,想要仅通过这些小颗粒,还原出原来城堡的样子,几乎是不可能的。这种不可逆性在数据安全领域至关重要,比如在用户密码存储中,网站后台存储的是用户密码的哈希值,即使数据库不幸被泄露,黑客也难以从哈希值中破解出用户的原始密码,有效保障了用户的隐私和账户安全。
(二)数据敏感性
哈希算法对数据的敏感性极高,哪怕原始数据只有极其微小的变化,生成的哈希值也会截然不同。以文件完整性校验为例,假设你有一份重要的文档,在传输之前计算出它的哈希值。如果在传输过程中,文档被恶意篡改,哪怕只是修改了一个标点符号,再次计算文档的哈希值时,新的哈希值会和原来的大相径庭,就像双胞胎也会有细微差别一样,通过对比哈希值,我们就能立刻察觉文件是否被篡改,从而保证数据的完整性和可靠性。
(三)低冲突性
冲突性是指不同的输入数据经过哈希算法计算后,得到相同哈希值的情况。根据鸽巢原理,哈希值的数量是有限的,而输入数据的可能性几乎是无限的,就像用有限数量的盒子(哈希值)去装无限数量的物品(输入数据),冲突的出现是难以避免的。不过,优秀的哈希算法能够尽量降低冲突的概率。例如,曾经广泛使用的 MD5 算法,虽然它生成的是 128 位的哈希值,理论上有(2^{128})种不同的哈希值,但随着计算能力的提升和数据量的增大,已经发现了不少冲突的情况,这也导致它逐渐被弃用。而像 SHA 系列算法,如 SHA - 256,通过更复杂和精妙的设计,大大降低了冲突的可能性,在安全性要求较高的场景中被广泛应用。
(四)高效性
哈希算法的计算速度非常快,能在极短的时间内对大量数据进行处理并生成哈希值。在如今这个数据爆炸的时代,数据量呈指数级增长,从海量的数据中快速提取和处理信息变得至关重要。哈希算法的高效性正好满足了这一需求,比如在数据库索引中,通过对数据进行哈希计算,能够快速定位到所需的数据,大大提高了查询和检索的效率,就像在一个巨大的图书馆里,通过高效的索引系统能迅速找到你想要的书籍,节省了大量的时间和精力。
三、常见哈希算法介绍
在哈希算法的大家族中,有几种算法因其各自的特点和优势,在不同的领域和场景中得到了广泛的应用。下面,我们就来详细了解一下其中的代表:MD5、SHA 系列以及 CRC32。
(一)MD5
MD5,全称 Message - Digest Algorithm 5(信息摘要算法 5),诞生于 20 世纪 90 年代初,由罗纳德・李维斯特(Ronald Rivest)设计。它可以将任意长度的输入数据,通过一系列复杂的位运算和压缩函数,转换为固定长度为 128 位(16 字节)的哈希值,通常以 32 位的十六进制字符串表示。
MD5 曾经在数据完整性校验、数字签名、口令加密等领域广泛应用。比如,在文件传输过程中,发送方会计算文件的 MD5 值并一同发送,接收方收到文件后也计算文件的 MD5 值,通过对比两个 MD5 值,就能判断文件在传输过程中是否被篡改。在早期的一些系统中,也会使用 MD5 对用户口令进行加密存储。
然而,随着计算机技术的飞速发展,MD5 的安全性逐渐受到了挑战。2004 年,中国山东大学的王小云教授在国际密码学会议上公布了 MD5 算法的破解结果,证明了可以找到两个不同的文件,使其具有相同的 MD5 哈希值,即出现了'碰撞'现象。这一发现使得 MD5 在安全性要求较高的场景中逐渐被弃用,比如在密码存储和数字签名等领域,因为攻击者可以利用碰撞漏洞伪造数据,使其 MD5 值与原始数据相同,从而绕过基于 MD5 的验证机制。不过,由于 MD5 算法的计算速度快,实现简单,在一些对安全性要求不高,只需要快速验证数据一致性的场景中,如一些内部测试环境、文件完整性初步校验等,仍然有一定的应用。
(二)SHA 系列
SHA(Secure Hash Algorithm,安全哈希算法)系列是由美国国家安全局(NSA)设计,美国国家标准与技术研究院(NIST)发布的一系列加密哈希函数。SHA 系列包括 SHA - 1、SHA - 2(包含 SHA - 224、SHA - 256、SHA - 384、SHA - 512 等)以及 SHA - 3 等多个版本,不同版本生成的哈希值长度不同,安全性和性能也有所差异。


