哈希函数(散列算法)的作用
哈希函数是一种将任意长度的消息映射为固定长度散列值(创建数字“指纹” )的函数。它的作用包括以下几点:
- 数据加密:哈希函数可以将原始数据加密成固定长度的密文,可以用于保护敏感数据的安全性,防止数据被篡改或窃取。
- 数据完整性验证:哈希函数可以将数据转换成散列值,这个散列值可以用于验证数据的完整性。只要数据未被篡改,计算出的散列值就应该是不变的。如果散列值不一致,就说明数据可能已被篡改。
- 数据检索:哈希函数可以将数据映射为固定长度的散列值,这些散列值可以用于数据检索。哈希表就是一种基于哈希函数实现的数据结构,可以快速地进行数据查找、插入、删除等操作。
- 数据分片:哈希函数可以将数据映射到不同的分片中,这些分片可以被用于数据分布式存储和处理。哈希函数可以将数据的哈希值与分片数量取模得到一个分片编号,然后将数据存储到对应的分片中。
- 安全验证:哈希函数可以被用于安全验证,例如密码验证。在存储用户密码时,通常会使用哈希函数将用户密码转换成散列值,然后将这个散列值存储在数据库中。当用户登录时,系统会将用户输入的密码再次通过哈希函数转换成散列值,然后与数据库中存储的散列值进行比较,从而进行密码验证。
常用的哈希函数
- MD5:基于消息的长度产生一个 128 位的散列值,常用于数据完整性验证和密码加密。
- SHA-1:基于消息的长度产生一个 160 位的散列值,被广泛应用于数字签名和证书认证。
- SHA-2:包括 SHA-224、SHA-256、SHA-384、SHA-512 等多种变体,散列值长度从 224 位到 512 位不等,是一种安全性较高的哈希函数。
- CRC:循环冗余校验码,通常用于数据传输错误检测。
- MurmurHash:一种非加密型哈希函数,适用于大规模数据的哈希处理,具有较低的冲突率和较高的速度。
- CityHash:一种快速的哈希函数,适用于大规模数据和分布式环境下的哈希处理。
- FNV Hash:一种非加密型哈希函数,通过将数据的每个字节与一个较大的质数进行异或运算得到哈希值,速度较快。
- Jenkins Hash:一种流行的哈希函数,适用于任何大小的数据,能够产生高质量的哈希值,冲突率较低。
对比:
哈希函数 | 发明时间 | 散列值长度 | 主要用途 |
MD5 | 1991 | 128 位 | 数据完整性验证和密码加密 |
SHA-1 | 1995 | 160 位 | 数字签名和证书认证 |
SHA-2 | 2001 | 224、256、384、512 位 | 安全性较高的哈希函数 |
CRC | 1961 | 固定长度 | 数据传输错误检测 |
MurmurHash | 2008 | 固定长度 | 大规模数据的哈希处理 |
CityHash | 2011 | 固定长度 | 大规模数据和分布式环境下的哈希处理 |
FNV Hash | 1991 | 固定长度 | 适用于哈希表和散列值比较 |
Jenkins Hash | 1997 | 固定长度 | 适用于任何大小的数据,高质量的哈希值,冲突率较低 |
本文暂时没有评论,来添加一个吧(●'◡'●)