Web 开发里的 5 种加密算法:原理与代码
做 Web 开发,迟早会碰到'加密'这件事。很多时候问题不在于要不要加密,而在于你到底是在做传输保护、数据保密、完整性校验,还是密码存储。把这几类需求混在一起,选型就容易出错。
下面这五种算法是 Web 场景里最常见的:AES、RSA、SHA-256、HMAC 和 PBKDF2。它们不是一类东西,解决的问题也完全不同。
1. AES:对称加密,适合处理大块数据
AES 用同一把密钥完成加密和解密,速度快,适合真正的数据加密。它的内部结构是替代-置换网络(SPN),核心流程是密钥扩展、若干轮变换,最后输出密文。
常见密钥长度是 128、192、256 位,对应的轮数分别是 10、12、14。实际项目里,AES-256 用得很多,但别把'位数更大'理解成'什么场景都更好',它只是更适合强度要求高的场景,性能也会稍慢一点。
适合的场景主要是:
- HTTPS 之外的业务数据加密
- 数据库敏感字段保护
- 文件加密存储
Node.js 里可以这样写:
const crypto = require('crypto');
// AES-256-CBC 加密
function encrypt(text, key, iv) {
const cipher = crypto.createCipheriv('aes-256-cbc', Buffer.from(key), iv);
let encrypted = cipher.update(text);
encrypted = Buffer.concat([encrypted, cipher.final()]);
return encrypted.toString('hex');
}
// AES-256-CBC 解密
function decrypt(encryptedText, key, iv) {
const encryptedBuffer = Buffer.from(encryptedText, 'hex');
const decipher = crypto.createDecipheriv('aes-256-cbc', Buffer.from(key), iv);
let decrypted = decipher.update(encryptedBuffer);
decrypted = .([decrypted, decipher.()]);
decrypted.();
}
key = crypto.();
iv = crypto.();
message = ;
encrypted = (message, key, iv);
.(, encrypted);
decrypted = (encrypted, key, iv);
.(, decrypted);





