文件指纹常见误区
老陈(后端工程师)笔记一则。密码存储方案他拍板,相关的坑我基本都替你先踩过一遍。
我带新人第一堂课就教文件指纹,因为数字签名里它最容易拉开差距。
先把标准定死,再用工具批量处理,最后按硬指标筛,文件指纹十分钟收工。
| 算法 | 输出长度 | 分组大小 | 典型用途 | 安全定位 |
|---|---|---|---|---|
| MD5 | 128位 | 512位分组 | 文件校验 | 不适合密码 |
| SHA-1 | 160位 | 512位分组 | Git历史校验 | 安全用途弃用 |
| SHA-256 | 256位 | 512位分组 | 数字签名与区块链 | 目前主流 |
| SHA-512 | 512位 | 1024位分组 | 高安全场景 | 64位机上更快 |
| CRC32 | 32位 | 流式计算 | 压缩包校验 | 非密码学算法 |
| bcrypt | 可变长度 | 自适应 | 密码存储 | 刻意算得慢 |
| SHA-3 | 256位 | 海绵结构 | 备选算法 | 设计路线不同 |
| HMAC | 256位 | 带密钥计算 | 接口签名 | 防数据篡改 |
| NTLM | 128位 | Windows域 | 旧系统认证 | 现代已弱化 |
先把哈希基础理顺
哈希把任意长度的数据压成固定长度的摘要,输入变一点输出全变,这就是文件指纹的底线,数字签名里别含糊。
相同输入永远得到相同摘要——这条做到,数字签名里你已经赢过八成的人。
用哈希的场合不绕弯子
数字签名
数字签名这种场子,记住密码存储讨论就够了。
数据备份
在数据备份,数字签名验证,别想复杂。
安全测试
安全测试里最实用的一条:数据完整性检查。
计算步骤不绕弯子
- 选算法
校验用MD5,安全用SHA-256。密码存储讨论里偷懒跳过这步,后面全得补。
- 输入原文或文件
动作要点:文本粘贴或文件上传,做不到位不算完。
- 对照摘要值
两边算出来比一比。下载完整性里偷懒跳过这步,后面全得补。
- 看是否一致
动作要点:一致就是没被改,做不到位不算完。
- 记录用途
哪里用的什么算法。发给客户里偷懒跳过这步,后面全得补。
拿下算法对照的动作
| 算法 | 输出长度 | 分组大小 | 典型用途 | 安全定位 |
|---|---|---|---|---|
| MD5 | 128位 | 512位分组 | 文件完整性校验 | 不再适合密码 |
| SHA-1 | 160位 | 512位分组 | 历史版本校验 | 安全用途已弃用 |
| SHA-256 | 256位 | 512位分组 | 数字签名 | 目前主流 |
| bcrypt | 可变 | 自适应 | 密码存储 | 刻意算得慢 |
教练只补一句:哈希管完整性,不管保密;存密码必须加盐加慢,选哪条路先看你数字签名最想保哪头。
先把使用误区理顺
拿MD5存密码
彩虹表一撞一个准,在数字签名这么干等于白忙,立刻改。
以为哈希能解密
别它是单向的,解不了——这是新手在文件指纹上栽得最多的地方。
加盐用固定值
等于没加,在数字签名这么干等于白忙,立刻改。
只对大小不内容
别文件大小一样内容不同——这是新手在文件指纹上栽得最多的地方。
拿下常见疑问的动作
文件指纹:为什么密码要加盐?
答案不绕弯:防彩虹表批量撞库,照这个口径在数字签名用就行。
文件指纹:MD5还能用吗?
直接说:文件校验可以,存密码不行。文件指纹的判断权在你,工具只负责给数。
文件指纹:MD5多少位?
直接说:128位,32个十六进制字符。文件指纹的判断权在你,工具只负责给数。
文件指纹:SHA-256多长?
答案不绕弯:256位,64个十六进制字符,照这个口径在数字签名用就行。
文件指纹:哈希能反推吗?
直接说:不能,只能暴力试。文件指纹的判断权在你,工具只负责给数。
先把使用细节理顺
- 文件校验用MD5或SHA256,现在就记进你的文件指纹动作里。
- 硬要求:存密码用慢哈希。
- 老手都在做:盐值每个用户不同,数字签名里特别管用。
- 摘要两边分开算,现在就记进你的文件指纹动作里。
- 硬要求:小改动看雪崩效应。
- 老手都在做:别自己发明哈希,数字签名里特别管用。
先把这个哈希值理顺
口令就到这。文件指纹真正难的不是没选项,是你肯不肯现在就做第一组。