什么是哈希函数?有哪些种类?
什么是哈希函数?
哈希函数(Hash Function)是一种将任意长度的数据映射到固定长度输出的算法。哈希函数常用于加密、数字签名、数据完整性验证、数据压缩等领域。
哈希函数具有以下几个特点:
- 固定输出长度:哈希函数的输出长度固定,不论输入数据的长度如何,输出长度都是固定的。
- 单向性:哈希函数是一种单向函数,即无法从哈希值推算出原始数据。这是哈希函数应用于密码学的一个关键特性。
- 确定性:对于相同的输入数据,哈希函数总是会生成相同的输出值。
- 雪崩效应:哈希函数的输入数据只要发生了微小的变化,输出值就会发生巨大的变化,这种效应被称为雪崩效应。
哈希函数广泛应用于密码学中,通常用于保护数据的机密性和完整性。例如,常用的密码存储方法是将用户密码经过哈希函数处理后存储在数据库中,当用户登录时,输入的密码会被哈希函数处理后与数据库中的哈希值进行比较,从而验证密码的正确性。
它为什么叫做哈希函数?
我们从英文中探寻原因。哈希函数(Hash Function),hash是肉末土豆泥的意思。

所以,我们把无限多转化为固定的过程称为Hashing.[1]

其实,哈希函数又叫做散列函数。
哈希函数和散列函数是同一概念的两个不同名称。它们都是将任意长度的输入数据映射为固定长度的输出结果的函数,可以用于数据加密、数据完整性校验、数据快速查找等领域。
不同的领域或不同的作者可能会使用不同的术语,但是它们所指的对象是相同的。在密码学、计算机科学等领域,一般使用散列函数的术语;在其他领域,如数学、统计学等,可能更多地使用哈希函数的术语。
散列函数的输出结果通常被称为散列码(Hash Code)或散列值(Hash Value),是一个固定长度的二进制串。散列函数的设计需要考虑到安全性、速度、散列性等因素,通常需要通过多次变换、扰动、置换等操作来保证输出结果的不可预测性和唯一性。
哈希函数有哪些种类?
哈希函数并不是一个函数,而是一类函数。(我之前就一直当成一个函数了,呜呜)
常见的哈希函数包括MD5(Message Digest Algorithm 5)、SHA-1(Secure Hash Algorithm 1)、SHA-256、SHA-512等等。其中,MD5和SHA-1已经被认为不安全,通常不再被推荐使用,而SHA-256和SHA-512等哈希函数目前仍然是较为安全的选择。
还有很多其他的哈希函数,包括:
- BLAKE:BLAKE是一种高效、安全的哈希函数,支持不同的哈希长度和输入块大小。
- RIPEMD:RIPEMD是一种比较流行的哈希函数,有RIPEMD-160和RIPEMD-320等不同版本。
- Whirlpool:Whirlpool是一种安全的哈希函数,其输出长度为512位,适用于数据完整性验证和数字签名等领域。
- Keccak:Keccak是一种新型的哈希函数,其特点是运算速度快、安全性高、可定制性强,被广泛应用于密码学、区块链等领域。
还有一些其他的哈希函数,每种哈希函数都有其自身的特点和适用场景,选择适合的哈希函数需要根据实际需求来进行评估和选择。
为什么哈希函数可以使得不管输入什么数据都有固定长度的输出?它是如何实现的呢?
我们深入了解一下MD5加密的过程作为一个例子来理解这个过程。
参考
- ^B站原视频 https://www.bilibili.com/video/BV1SZ4y1z7wT/?spm_id_from=333.337.search-card.all.click&vd_source=8f27812c29160a55017b833cbe55b7f0