什么是哈希
哈希(Hash) 就是把任意长度的输入数据(比如一段文字、一个文件)通过某种 算法,转换成一个 固定长度的字符串。可以理解成 “数据指纹”。
主要目的
保证完整性(Integrity):验证数据完整 → 数据有没有被改
哈希特点
- 固定长度:无论输入多长,输出长度固定。比如 SHA-256 总是输出 256 位。
- 不可逆:哈希过程是单向的,不能通过哈希值还原原文。(比如你拿到 5d4140…,无法直接算出 “hello”)
- 雪崩效应:输入稍微改变,输出完全不同。 “hello” → 5d41402abc… “Hello” → 8b1a9953c4…
- 唯一性(几乎): 理想状态下,不同输入不会得到相同的哈希值。(现实中可能会出现 哈希碰撞,但概率非常低)
哈希的用途
- 密码存储:存储用户密码时,存哈希而不是明文。
- 数据校验:下载文件时,用哈希检查是否被篡改。
- 数字签名:保证消息的完整性和来源。
- 区块链:比特币等加密货币依赖哈希函数。
常见的算法
- MD5(128 位,已不安全)
- SHA-1(160 位,也不安全了)
- SHA-256 / SHA-512(目前常用)
- bcrypt / scrypt / Argon2(专门用于密码存储,安全性更高)
bcrypt 加密算法库
- bcrypt.js
- 加盐 (salt)
- 增加计算成本 (cost factor)