📖 术语
🟢 通俗解释
🔰 新手
🔑 哈希 Hashing
哈希就是把任意输入——一个词、一个文件、一笔交易,乃至一整个区块——丢进一个固定的数学函数,吐出一段短短的、长度固定的字符串,这段字符串就叫哈希值。同样的输入永远得出同样的哈希,而你永远没法把它倒着算回去,还原出原来的内容。
💡
常见误解 — 哈希是不是加密的另一种说法、可以「解密」回来?不是!加密靠密钥可以还原、目的是保密。哈希既没有密钥,也没有撤销键——它是单向的,用来验证数据有没有被动过手脚。
🪪 通俗来说 — 一枚数字指纹
不妨把哈希当成一段数据的数字指纹。随便喂进去点什么,函数都会返回一串看起来独一无二的字符,用来认出它。由此引出两件好用的事。第一,它是确定的:同样的输入永远得出一模一样的哈希,所以谁都能复算核对。第二,它是一道防篡改的封条:哪怕数据只改了一个字符,指纹就对不上了,任何小动作都会当场露馅。
🧪 让它好用的四个特性
| 特性 | 含义 |
|---|---|
| 🔁 确定性 | 同样的输入永远得出一模一样的哈希 |
| ➡️ 单向 | 能从输入算到哈希,却永远没法从哈希倒推回输入 |
| 🌊 雪崩效应 | 改动一个字符,整个哈希就面目全非 |
| 💥 抗碰撞 | 想找出两个哈希值相同的输入,几乎不可能 |
📏 输出的长度永远固定。SHA-256 返回的是 256 位的哈希——写出来就是 64 个字符——不管你哈希的是一个字母,还是一整部电影。
🔗 加密世界为什么离不开哈希
区块链是一条由区块串成的链,而哈希就是把它们粘起来的胶水。每个区块都存着前一个区块的哈希。动了某个旧区块,它的哈希就变了,于是它跟后面每一个区块的链接全都断开——作假的痕迹整个网络都看得一清二楚。你在区块浏览器上看到的那些字符串,也都是哈希算出来的:交易 ID、区块哈希、钱包地址,无一例外。
⛓️ 你会在哪儿碰到它:比特币与以太坊
比特币用的是一个叫 SHA-256 的函数,挖矿(工作量证明)、验证交易、生成地址都靠它。以太坊用的则是另一个叫 Keccak-256 的函数。名字不同,干的活却一样:生成一段没人能伪造、也没人能倒推的固定长度指纹。
🚨 新手容易搞错的地方
- 🔓 「哈希可以解密」 — 不行。它既没有密钥,也没有回头路;想对上某个哈希,唯一的办法就是把原始输入再哈希一遍
- 🟰 「哈希等于加密」 — 两码事。加密是把数据藏起来、日后能解开;哈希是给数据按指纹、好让任何改动都暴露
- 📐 「文件越大,哈希越长」 — 不会。输出长度由函数定死,跟输入大小无关
❓ 常见问题
- 哈希和加密是一回事吗?
- 不是。加密是可逆的:拿到对应的密钥,就能把密文还原成原文,目的是保密。哈希既没有密钥,也没有「撤销」键——它是单向的,用来验证数据有没有被改动,以及生成各种标识符。
- 能不能解密或倒推哈希,把原始输入还原出来?
- 不能。哈希是单向的。你可以从输入算出哈希,却无法反过来从哈希推回当初放进去的内容。想对上某个哈希,唯一的办法就是手里已经有原始输入,再算一遍。
- 为什么每个哈希看起来长度都一样?
- 无论输入有多大,这个函数输出的长度都固定不变。比特币用的 SHA-256 永远生成 256 位的哈希,写出来就是 64 个字符——不管你哈希的是一个字母,还是一整部电影文件。