四种哈希算法怎么选
哈希(散列)把任意长度的数据压缩成固定长度的摘要:MD5 输出 128 位(32 个十六进制字符),SHA-1 输出 160 位(40 字符),SHA-256 输出 256 位(64 字符),SHA-512 输出 512 位(128 字符)。同样的输入永远得到同样的摘要,输入改动一个字节,输出会完全不同,这叫雪崩效应;而摘要无法反推回原文,所谓“MD5 解密”其实是拿常见口令的彩虹表反查。
选择上有明确结论:MD5 在 2004 年、SHA-1 在 2017 年先后被公开构造出碰撞,也就是能造出两份不同文件却有相同摘要,因此它们不能再用于数字签名、证书和防篡改校验;但用来核对下载文件有没有传输损坏、给缓存做键名仍然够用。需要安全性时请用 SHA-256 或 SHA-512,目前没有可行的攻击方法。在 64 位机器上 SHA-512 往往比 SHA-256 还快。
本工具的计算方式与常见用途
页面先把文本按 UTF-8 编码成字节,再计算摘要。MD5 由本页内置的 JavaScript 实现完成,遵循 RFC 1321;SHA 系列调用浏览器内置的 Web Crypto 接口 crypto.subtle.digest,因此是异步的,MD5 会先显示,SHA 结果随后补上。注意编码会影响结果:同一句中文按 UTF-8 和按 GBK 编码得到的哈希不同,跨系统比对时必须统一编码。文本末尾多一个换行,摘要也会完全不同。
常见用途包括:核对软件下载包的官方校验值;给接口签名(把参数排序拼接后加密钥做摘要);数据库里保存文件指纹以判断重复上传;给用户密码加盐存储。请注意保存密码时不能只做一次 SHA-256,必须使用 bcrypt、scrypt 或 PBKDF2 这类慢哈希并加随机盐,否则显卡每秒可以尝试上百亿次。所有计算在你的浏览器中完成,内容不会上传到服务器。