哈希方程(Hash Function)是一种将任意长度的输入(称为预映射)通过散列算法变换成固定长度的输出,该输出就是哈希值。这种转换是一种压缩映射,哈希值的空间通常远小于输入的空间。
一个理想的哈希函数具有以下特性:
哈希函数可以表示为:
h = H(M)
其中:
哈希函数在密码学中用于密码存储、数字签名和消息认证码(MAC)。常见的密码学哈希函数包括SHA-256、SHA-3和BLAKE2。
区块链中的每个区块都包含前一个区块的哈希值,形成不可篡改的链式结构。比特币使用SHA-256,以太坊使用Keccak-256。
哈希表使用哈希函数将键映射到数组中的索引,实现平均O(1)时间复杂度的查找、插入和删除操作。
通过比较文件的哈希值可以验证数据在传输或存储过程中是否被篡改。例如,软件下载网站通常会提供文件的MD5或SHA-256哈希值供用户验证。
哈希值可以作为数据的唯一指纹,用于重复数据检测。云存储服务使用哈希技术识别重复文件,节省存储空间。
| 算法名称 | 输出长度 | 安全性 | 主要应用 | 诞生年份 |
|---|---|---|---|---|
| MD5 | 128位 | 已不安全 | 文件完整性校验 | 1992 |
| SHA-1 | 160位 | 弱安全 | 旧版SSL/TLS证书 | 1995 |
| SHA-256 | 256位 | 安全 | 比特币、SSL/TLS | 2001 |
| SHA-3 | 可变 | 安全 | 新一代密码学标准 | 2015 |
| BLAKE2 | 可变 | 安全 | 高性能应用 | 2012 |
哈希碰撞是指两个不同的输入产生了相同的哈希值。对于不安全的哈希函数如MD5,已经可以人为制造碰撞。
输入1: "Hello World" MD5: b10a8db164e0754105b7a99be72e3fe5 输入2: "Goodbye World" MD5: 不同的哈希值 碰撞示例(理论上): 输入A: [特定数据] 输入B: [不同数据] MD5(输入A) = MD5(输入B) ← 哈希碰撞
不同哈希算法在安全性和性能之间存在权衡:
哈希函数和加密算法的主要区别在于:
MD5和SHA-1已被证明存在严重的安全漏洞:
哈希函数是区块链技术的核心组成部分:
盐值是在密码哈希过程中添加的随机数据,用于增强安全性:
选择哈希函数时需要考虑以下因素: