密码学入门:哈希、加密、签名一次搞懂
加密用错了,比不加密还危险
密码学是数据安全的数学基础,从密码存储到API签名验证,从传输加密到文件校验,到处都在用。但密码学概念多、容易混淆,用错了反而引入安全漏洞。我从开发者视角,梳理哈希、加密和签名三大核心概念。
哈希算法:不可逆的数据指纹
哈希算法将任意长度的输入映射为固定长度的输出,具有不可逆性和抗碰撞性。相同输入始终产生相同输出,不同输入几乎不可能产生相同输出。
MD5:输出128位(32位十六进制),已被证明存在碰撞漏洞,不推荐用于安全场景,但仍可用于文件校验和去重。MD5哈希工具 可快速计算文本和文件的MD5值。
SHA系列:SHA-1(160位)已不安全;SHA-256(256位)是目前最常用的安全哈希算法;SHA-512(512位)提供更高安全等级。SHA加密工具 支持SHA-1/256/512等多种变体。
哈希的典型应用:
- 密码存储:存储哈希值而非明文密码,加盐(salt)防止彩虹表攻击
- 数据完整性校验:对比哈希值验证数据是否被篡改
- 文件去重:相同文件具有相同哈希值
- 区块链:工作量证明和区块链接
文件哈希校验工具 可计算文件的MD5/SHA值,用于验证下载文件的完整性和一致性。
对称加密:同一密钥加解密
对称加密使用同一密钥进行加密和解密,速度快、效率高,适合大量数据加密。
AES:高级加密标准,支持128/192/256位密钥,是目前最安全的对称加密算法之一,广泛用于TLS、磁盘加密等场景。AES加密工具 支持AES-128/192/256加密解密,支持ECB和CBC模式。
DES/3DES:DES密钥仅56位已不安全,3DES使用三次DES加密提升安全性但效率较低。DES加密工具 可用于兼容遗留系统。
AES加密模式选择:
- ECB模式:相同明文块产生相同密文块,不适合加密有规律的数据
- CBC模式:每个明文块与前一个密文块异或后再加密,更安全
- GCM模式:提供加密和认证双重保障,推荐用于网络通信
HMAC签名:消息认证码
HMAC(Hash-based Message Authentication Code)使用密钥和哈希算法生成消息认证码,同时验证消息的完整性和真实性。
HMAC计算过程:HMAC(K, m) = H((K' ⊕ opad) || H((K' ⊕ ipad) || m)),其中K'是填充后的密钥,ipad和opad是固定的填充常量。
HMAC典型应用:
- API签名验证:AWS、阿里云等云服务使用HMAC-SHA256签名API请求
- JWT签名:HS256算法使用HMAC-SHA256签名令牌
- 消息完整性:确保消息在传输过程中未被篡改
HMAC生成器 支持HMAC-SHA256/SHA512等算法,可快速生成和验证HMAC签名。
密码学使用注意事项
- 永远不要自己实现加密算法,使用成熟的标准库
- 密码存储必须加盐(salt),推荐使用bcrypt/Argon2
- 对称加密优先选择AES-GCM模式
- 密钥管理比算法选择更重要,密钥泄露等于没有加密
- 不要用MD5/SHA1做安全校验,使用SHA-256及以上
- HTTPS是传输加密的基础,不要在HTTP上传输敏感数据
- 初始化向量(IV)必须随机且不可预测
所有密码学工具均采用本地处理方式,哈希计算、加密解密、签名生成等操作在浏览器端完成,你的明文数据和密钥不会上传到服务器,这是使用在线密码学工具最重要的安全保障。
总结
密码学是数据安全的基石。哈希算法(MD5、SHA)用于数据指纹和完整性校验,对称加密(AES、DES)用于数据保密,HMAC签名(HMAC生成器)用于消息认证,文件校验(文件哈希校验)用于完整性验证。理解这些概念并正确使用对应工具,是构建安全应用的第一步。