先把三条线分清

安全领域术语很多,职责其实只有三条:加密管保密(内容别让人看见)、校验管完整(内容别让人改)、鉴权管身份(知道是谁在操作)。 大部分"安全事故"复盘下来都是拿错工具:用校验码保密,用非密码学校验防篡改,用可逆加密存口令。从古典玩法开始,每个边界亲手摸一遍,比背十遍名词有用。

古典密码:手算一遍胜过背十遍

凯撒是单表替换的极限:所有字母统一移 3 位,HELLO 变 KHOOR。弱点一眼看穿——字母频率没变,英文里 E 的使用约占 13%,数一数密文频率再整体平移就能破。维吉尼亚升级为多表替换:每个明文字母用密钥字母开头的移位表。用密钥 KEY 加密 HELLO,把密钥循环铺在明文下面,逐位相加取模 26:

明文H(7)E(4)L(11)L(11)O(14)
密钥K(10)E(4)Y(24)K(10)E(4)
相加 mod 2617→R8→I9→J21→V18→S

结果 RIJVS,每一步都能手算复核。维吉尼亚密码工具把加解密做成即输即得,玩透它顺便理解柯克霍夫原则:系统的安全该依赖密钥,而不是算法保密。 想把 Base64、URL 编码、HTML 实体这类常用编码转换收进一张界面,编码转换器一站搞定,粘贴文本逐个试。

校验:CRC 防的是噪声,哈希防的是敌人

CRC 有标准测例:CRC-32(“123456789”) = 0xCBF43926,zip、PNG 用的就是这个 CRC-32,串口协议和文件头靠它对一下就知道数据有没有传坏。CRC校验计算器支持 CRC-8/CRC-16/CRC-32 三种多项式,例如 Modbus 帧常用的就是 CRC-16。但注意 CRC 是线性算法:攻击者可以随意改内容、再补一段数据让 CRC 保持不变——它防信道噪声,不防有意篡改。

防篡改上哈希:hello 的 MD5 是 5d41402abc4b2a76b9719d911017c592,SHA-256 是 2cf24dba…938b9824(64 个十六进制字符),MD5生成器和SHA生成器本地即算。MD5 因碰撞被攻破,判"两个文件是不是同一份"尚可,对抗蓄意篡改请换 SHA-2 系。要同时防篡改和抵赖,用带密钥的HMAC生成器:开放 API 的常见打法是"时间戳+随机数+参数排序"拼串后用共享密钥签名,服务端重算比对——改一个字节或重放旧包,签名立刻对不上。

鉴权:bcrypt 只能验证,不能反推

正规系统的库里不存明文口令,存 bcrypt 输出:格式 $2b$12$ 加 22 字符盐、31 字符摘要,共 60 个字符;cost 12 意味着 2¹²=4096 轮拉伸,攻击者每猜一次口令都得付同样的电费——单次验证动辄上百毫秒,这不是卡顿,是护城河。关键性质:bcrypt 单向,不存在"解密哈希"。登录流程只能是"取出存储时用的盐和 cost,把候选口令重算一遍再比对"。调试时拿到一条口令哈希,想知道某个明文对不对,用 Bcrypt验证:粘贴哈希和候选口令,返回匹配与否——哈希本身也是敏感数据,验证在浏览器本地完成就没必要送出去。

口令的下一代是动态口令。HOTP 按计数器"每用一次 HMAC-SHA1 截一次码",TOTP 把计数器换成 当前时间戳 ÷ 30,得到 30 秒一刷新的 6 位码。RFC 4226 给过官方测例:密钥 12345678901234567890、计数器 0 时输出 755224,可对表验算。OTP认证器在本地生成与验证 TOTP/HOTP,还能直接产出二维码、兼容 Google Authenticator——二维码里就是密钥本体,本地生成意味着它不经过任何中转服务器。

Diffie-Hellman:公开信道里商量一个秘密

用一位数模数做一次玩具推演:公开 p=23、g=5。Alice 私藏 a=6,公布 5⁶ mod 23 = 8;Bob 私藏 b=15,公布 5¹⁵ mod 23 = 19。各自算共享秘密:Alice 算 19⁶ mod 23 = 2,Bob 算 8¹⁵ mod 23 = 2,两条路殊途同归得到 2。窃听者拿到了 8 和 19,但要求出 a 或 b 得先解离散对数——真实参数下算不动。这套 1976 年提出的玩法,第一次让"商量密钥"不再依赖物理信道。Diffie-Hellman密钥交换提供生产级练习:ECDH/X25519,支持 P-256/P-384/P-521/X25519 四条曲线,密钥对和共享秘密都在浏览器本地生成。哈希与加密的完整谱系,可看《加密与哈希工具全景:从 MD5 到国密》。

常见问题

CRC 能防文件被篡改吗?

不能。CRC 为随机错误设计,篡改者总能为任意改动找到一个保持 CRC 不变的补丁。完整性交给 MD5/SHA,防篡改与抵赖交给 HMAC 或签名。

MD5 现在还能用吗?

“对抗性"场景不能,“一致性检查"场景还能:判断两个文件是否同一份、校验下载完整,普通损坏几乎不会撞上同摘要;一旦对手是故意构造碰撞的攻击者,直接换 SHA-256。

TOTP 码总验证不过怎么办?

九成是时钟漂移:服务器默认只宽容 ±1 个窗口(±30 秒),手机或服务端时钟差超过一分钟就废。先开 NTP 对时,仍不对再重新扫一次密钥二维码。

小结

三条线各归各位:保密靠加密——凯撒、维吉尼亚带你入门,Diffie-Hellman 负责在开放信道上建立共同秘密;完整靠校验——CRC 防噪声、MD5/SHA 防损坏、HMAC 同时防篡改和抵赖;身份靠鉴权——bcrypt 验证口令、TOTP 动态码。 文中的 RIJVS、0xCBF43926、共享秘密 2、755224 都能拿工具当场复算。密钥、口令哈希、Base32 secret 都是高敏感数据,本文全部工具在浏览器本地运行,一个字符都不出本机。