常规JS加密汇总大全
一、基础编码类
1. Base64 编码与解码
功能说明:将二进制数据转换为可打印ASCII字符,实现数据安全传输 应用场景:URL参数传递、图片DataURL生成、简单数据混淆
javascript
// 编码
const encoded = btoa('Hello加密!');
console.log(encoded); // "SGVsbG/liqDlr4Yh"
// 解码
const decoded = atob(encoded);
console.log(decoded); // "Hello加密!"
二、单向哈希类
2. MD5 散列
功能说明:生成128位固定长度哈希值(已不推荐用于安全场景) 应用场景:文件校验、低风险密码存储(需加盐)
javascript
// 使用CryptoJS
const hash = CryptoJS.MD5('message').toString();
// 输出:78e731027d8fd50ed642340b7c9a63b3
3. SHA-256
功能说明:NSA设计的加密哈希算法,输出256位哈希值 应用场景:区块链、数字签名、密码存储
javascript
// Web Crypto API实现
async function sha256(message) {
const encoder = new TextEncoder();
const data = encoder.encode(message);
const hash = await crypto.subtle.digest('SHA-256', data);
return Array.from(new Uint8Array(hash))
.map(b => b.toString(16).padStart(2, '0')).join('');
}
// 输出:d7e43b...
三、对称加密类
4. AES 加密
功能说明:行业标准对称加密,支持128/192/256位密钥 应用场景:本地存储加密、HTTPS数据传输
javascript
// AES-CBC模式示例
const encrypted = CryptoJS.AES.encrypt(
'敏感数据',
'secret-key-12345',
{ iv: CryptoJS.lib.WordArray.random(128/8) }
).toString();
// 解密
const decrypted = CryptoJS.AES.decrypt(
encrypted,
'secret-key-12345'
).toString(CryptoJS.enc.Utf8);
5. XOR 自定义加密
功能说明:轻量级位运算混淆(非强加密) 应用场景:临时数据混淆、游戏存档保护
javascript
function xorEncrypt(text, key) {
return text.split('').map((char, i) =>
String.fromCharCode(char.charCodeAt(0) ^ key.charCodeAt(i % key.length))
).join('');
}
// 使用示例
const encrypted = xorEncrypt('data', 'KEY'); // 输出乱码
const decrypted = xorEncrypt(encrypted, 'KEY'); // "data"
四、非对称加密类
6. RSA 加密
功能说明:公钥加密,私钥解密 应用场景:登录密码加密、数字证书
javascript
// 前端使用公钥加密
const encrypt = new JSEncrypt();
encrypt.setPublicKey(publicKey);
const encrypted = encrypt.encrypt('password');
// 后端解密(Node.js示例)
const decrypt = (encrypted) => {
const buffer = Buffer.from(encrypted, 'base64');
return crypto.privateDecrypt(
{ key: privateKey, padding: crypto.constants.RSA_PKCS1_OAEP_PADDING },
buffer
).toString();
};
五、数字签名类
7. HMAC 签名
功能说明:密钥相关的哈希消息认证码 应用场景:API请求防篡改、Webhook验证
javascript
// 生成HMAC-SHA256签名
const signature = CryptoJS.HmacSHA256(
'param1=value1¶m2=value2',
'API_SECRET'
).toString();
// 验证签名(后端示例)
const isValid = signature === expectedSignature;
六、浏览器安全接口
8. Web Crypto API
功能说明:浏览器原生加密标准 应用场景:安全密钥生成、高性能加密
javascript
// 生成AES密钥
crypto.subtle.generateKey(
{ name: "AES-GCM", length: 256 },
true,
["encrypt", "decrypt"]
).then(key => {
// 导出密钥
crypto.subtle.exportKey("raw", key)
});
七、附加模块
9. URL 安全编码
javascript
// 编码特殊字符
const safeParam = encodeURIComponent('name=张三&age=20');
// 输出:name%3D%E5%BC%A0%E4%B8%89%26age%3D20
// 解码
decodeURIComponent(safeParam);
10. 加密方式对比表
| 特性 | Base64 | MD5 | SHA-256 | AES | RSA |
|---|---|---|---|---|---|
| 可逆性 | ✓ | ✗ | ✗ | ✓ | ✓ |
| 密钥需求 | ✗ | ✗ | ✗ | ✓ | ✓ |
| 适合场景 | 编码 | 校验 | 高安全 | 传输 | 非对称 |
| 输出长度 | 可变 | 128b | 256b | 可变 | 可变 |
| 前端性能 | 优 | 优 | 良 | 良 | 差 |
📌 关键补充建议
-
密钥管理:
javascript
// 安全存储方案 sessionStorage.setItem('tempKey', encryptedKey); // 会话级存储 IndexedDB.saveKey(userMasterKey); // 持久化存储 -
前后端交互: example.com/rsa-flow.pn… (图示:前端公钥加密 → 网络传输 → 后端私钥解密)
-
安全实践:
- 敏感操作使用HTTPS
- 密码存储必须加盐:
hash = sha256(password + salt) - 定期轮换加密密钥
-
性能优化:
javascript
// Web Worker中运行加密 const cryptoWorker = new Worker('crypto-worker.js'); cryptoWorker.postMessage({ data: largeData, type: 'encrypt' });
此方案覆盖Web开发中90%的加密需求,开发者可根据实际安全等级要求选择合适的加密方式。
该文章最终解释权归jsjiami官方客服所有
关于js加密等相关问题可咨询jsjiami点com官方客服