从输入到摘要:拆解 SHA-256、MD5 等主流哈希算法的核心步骤,理解不可逆的“数字指纹”如何生成。
整个过程不可逆,任何输入微变都会导致输出雪崩式改变。
算法安全强度对比
从Git提交指纹到比特币挖矿,从HTTPS证书到软件校验,哈希是数字世界的信任根基。
1. 数据分块与填充 — 无论输入是文本、文件还是交易数据,首先进行二进制填充,保证长度为块大小的整数倍。以SHA-256为例,填充后长度 ≡ 448 mod 512,最后64位为原始长度。
2. 压缩函数的轮运算 — 每一轮包含:
➜ 扩展消息调度 (Wt)
➜ 逻辑函数 (Ch, Maj, Σ0, Σ1)
➜ 模加与循环移位,实现扩散与混淆。
3. 初始向量与常数 — SHA-256使用8个32位初值(取自自然数平方根小数部分),每轮使用64个常数(立方根小数部分),保证随机性。
4. 输出与碰撞概率 — 256位哈希值空间为2^256,极大降低碰撞可能。但MD5已可被暴力碰撞,因此高安全场景必须用SHA-2或SHA-3。
不能。哈希是单向函数,只能从输入计算输出,无法从输出还原输入。但可通过彩虹表或暴力枚举对简单密码进行逆向猜测。
两个不同的输入产生相同的哈希值。MD5和SHA-1已被证明可构造碰撞,因此不再用于安全场景。SHA-256目前无公开碰撞。
矿工不断改变随机数 (nonce),对区块头进行双重SHA-256计算,直到哈希值小于目标难度。每秒可进行数万亿次哈希运算。
Linux/macOS: sha256sum 文件名 ; Windows: certutil -hashfile 文件名 SHA256 。比对官方提供的摘要即可。
加密可逆(有密钥),哈希不可逆。哈希主要用于完整性验证与指纹,加密用于机密性保护。
输入任意文本,即时生成MD5、SHA-1、SHA-256、SM3哈希值。 开发调试必备工具。
模拟功能 (占位)
每个区块的哈希值由父区块哈希、交易默克尔根、时间戳等共同计算,形成不可篡改的链条。
技术白皮书 (占位)