哈希算法(Hash Algorithm)的核心原理可以用一句话概括:把任意长度的输入,通过一套确定性的数学规则,映射成固定长度的输出,并且尽量做到“雪崩效应”和“单向不可逆”。下面从直观、数学、结构和常见误区几个层面逐步拆解。
你可以把哈希算法想象成:
不管你丢进去一本书、一张照片还是一句话,它都能给你生成一串固定长度的“特征码”
比如经典 MD5:
hello → 5d41402abc4b2a76b9719d911017c592
这个输出的特点:
一个合格的哈希算法通常追求下面几个核心性质:
同一个输入,永远得到同一个输出。
hash("abc") == hash("abc")
不管输入是:
输出长度都不变。
输入哪怕只改 1 个比特,输出也会完全不同。
hello → 5d41402abc4b2a76b9719d911017c592
hellp → 6b7758279dcef6b4e7e2f2f1f5e5f5c5
无法从哈希值反推出原始数据
⚠️ 注意:哈希 ≠ 加密
加密是可逆的,哈希是不可逆的。
很难找到两个不同的输入,得到相同的哈希值。
下面用通用结构解释,不纠缠某一具体算法:
哈希算法通常不能一次性处理全部数据,而是分块:
输入数据 → 分块 → 逐个处理
比如:512 bit 一 block
算法会先有一个初始“寄存器状态”(像一组魔法数字):
A, B, C, D ...
这是哈希的灵魂
每一块数据都会:
伪代码示意:
state = init
for block in blocks:
state = compress(state, block)
hash = state
压缩函数里通常大量使用:
目的:
SHA-256 的流程可以理解为:
它使用的结构叫:
Merkle–Damgård 结构
不是因为“加密”,而是因为:
类比:
把一杯水倒进大海,你没法再把这杯水原样取回来。
| 算法 | 输出长度 | 现状 |
|---|---|---|
| MD5 | 128bit | 已不安全(易碰撞) |
| SHA-1 | 160bit | 已不安全 |
| SHA-256 | 256bit | ✅ 主流安全 |
| SHA-3 | 可变 | ✅ 新一代 |
| BLAKE3 | 可变 | ✅ 极快 |
❌ 哈希是加密
✅ 哈希是摘要 / 指纹
我可以:
你是偏 原理 / 安全 / 编程实现 / 面试 哪一块?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。