哈希算法说白了就是一台「单向指纹机」:不管你丢进去多长的内容,它都吐出一串**固定长度的指纹**。同一份输入永远得到同一个指纹,输入改一个字,指纹就天翻地覆——而且**没法从指纹反推出原文**。加密世界里到处都有它的影子:挖矿、地址生成、区块链接、Merkle 树。下面盘点几个常见的哈希算法,并讲讲它们在区块链里各干什么。
一、哈希算法的三大特点
- 确定性:同样的输入,永远得到同样的输出。
- 不可逆:知道指纹也算不出原文(单向性)。
- 抗碰撞加雪崩效应:极难找到两个输入产生同一指纹;输入哪怕改一个比特,输出也会面目全非。
(上图:常见哈希算法在安全性等维度上的示意评分)
二、常见哈希算法盘点
- MD5:输出 128 位,诞生很早,早已被证明不安全(能人为制造碰撞),现在只适合做校验,别用于安全场景。
- SHA-1:输出 160 位,也已被攻破(Google 的碰撞攻击是名场面),同样不建议用于安全用途。
- SHA-256:输出 256 位,比特币 PoW 挖矿的核心算法,安全性高,是目前应用最广的哈希之一。
- SHA-512 / SHA-3:SHA 家族的新一代,输出更长、设计更新,抗攻击性更强。
- RIPEMD-160:输出 160 位,常和 SHA-256 搭配生成比特币地址。
- Keccak / Keccak-256:SHA-3 背后的算法,以太坊用它做地址和签名相关的哈希。
(上图:密码学哈希函数「输入变固定指纹」的概念示意)
三、输出长度对比
输出越长,理论上越难碰撞、越安全,但计算和存储开销也更大。常见对比如下(单位:位)。
(上图:不同哈希算法的输出长度对比示意)
四、哈希在加密里到底干嘛用
- 挖矿(PoW):矿工反复做哈希找符合难度的结果,这就是「工作量证明」。
- 地址生成:公钥经过哈希运算得到地址,缩短长度同时增强安全性。
- 区块链接:每个区块都存着上一个区块的哈希,一改就断链,篡改成本极高。
- Merkle 树:把大量交易逐层哈希,最后得到一个「根哈希」,能高效校验交易是否被篡改。
- 数据完整性:下载文件、校验交易都用它确认内容没被动过。
(上图:Merkle 树逐层哈希的结构示意)
五、提醒与总结
- MD5、SHA-1 已不安全,做密码存储、签名这类场景千万别用。
- 选算法看用途:挖矿多用 SHA-256,以太坊生态常见 Keccak,地址生成常是 SHA-256 加 RIPEMD-160 的组合。
- 哈希不等于加密:哈希不可逆,加密是可解的,两者别搞混。
哈希在挖矿里的具体作用
挖矿的本质是「找一个数,让区块头的哈希小于目标值」。因为哈希有雪崩效应,你没法预测结果,只能不停换随机数硬算,谁先算出来谁获得记账权。算完之后,结果又极易被任何人验证——难算、易验,这正是 PoW 的精髓。
为什么区块链离不开哈希
- 防篡改:区块之间靠哈希串联,改一个块,后面全对不上。
- 高效校验:Merkle 树把成千上万笔交易压成一个根哈希,校验时只需少量数据。
- 工作量凭证:挖矿产生的哈希结果本身就是「我干过活」的证明。
- 地址与身份:公钥哈希成地址,既缩短长度,也提升了安全性。
一个常见疑问:输出越长越安全吗
大体上是的——输出越长,暴力碰撞的难度越大。但安全性不只取决于长度,还取决于算法设计是否被攻破。SHA-1 长度 160 位,比 MD5 的 128 位长,但两者在现代标准下都已被证明不够安全。所以选算法时,算法本身是否仍被信任,比单纯看长度更重要。
哈希和加密,别搞混
很多人把这两个词混着用,其实完全不同:
- 哈希:单向、不可逆,用来做「指纹」和完整性校验,无法还原原文。
- 加密:可逆,用密钥能解回原文,用来保护机密。
- 签名:用私钥签名、公钥验签,证明「是你本人发的」,也不等于加密。
区块链里三者都用:哈希管链接与挖矿,加密与签名管身份和授权。
怎么挑哈希算法
- 只要安全性:优先 SHA-256、SHA-3、Keccak 这类现代算法。
- 要短地址或短输出:RIPEMD-160 常配合 SHA-256 使用。
- 要老系统兼容:可能不得不留 MD5、SHA-1,但务必清楚它们已不安全,别用于签名或口令。
一张通俗版对照(便于记忆)
- MD5:128 位,老、快、已不安全,多用于校验。
- SHA-1:160 位,已被攻破,别用于安全场景。
- SHA-256:256 位,比特币挖矿核心,安全、通用。
- SHA-512:512 位,输出更长,安全性更高,开销也更大。
- RIPEMD-160:160 位,常与 SHA-256 搭配生成地址。
- Keccak-256:以太坊生态常用,SHA-3 系列。
选算法前想三件事
- 用途是什么?(挖矿、地址、签名还是校验)
- 这个算法现在还被信任吗?(MD5、SHA-1 已经不行)
- 生态需不需要兼容?(比如比特币用 SHA-256,以太坊用 Keccak)
答案清楚了,算法自然就选出来了。
常见问题速答
- 问:哈希能被反推吗? 不能,它是单向的。
- 问:MD5 还能用吗? 做校验可以,安全场景不行。
- 问:比特币用哪个? SHA-256,地址还用到 RIPEMD-160。
- 问:以太坊呢? Keccak(SHA-3 系列)。
补充一下:哈希值还有一个「定长」特点——无论输入是一句话还是一部电影,输出长度都一样。比特币区块头哈希固定 256 位,Merkle 根也是定长,这让存储和校验都变得简单高效。也正因为定长,才能把成千上万笔交易「压缩」成一个短小的指纹,用极小的数据量完成完整性验证。
风险提示:本文为技术科普,不构成任何投资建议。涉及加密资产请自行研究并遵守当地法律法规。








