常规JS加密汇总大全

124 阅读3分钟

常规JS加密汇总大全

一、基础编码类

1. Base64 编码与解码

功能说明:将二进制数据转换为可打印ASCII字符,实现数据安全传输 应用场景:URL参数传递、图片DataURL生成、简单数据混淆

javascript

// 编码
const encoded = btoa('Hello加密!'); 
console.log(encoded); // "SGVsbG/liqDlr4Yh"// 解码
const decoded = atob(encoded);
console.log(decoded); // "Hello加密!"

base64.png


二、单向哈希类

2. MD5 散列

功能说明:生成128位固定长度哈希值(已不推荐用于安全场景) 应用场景:文件校验、低风险密码存储(需加盐)

javascript

// 使用CryptoJS
const hash = CryptoJS.MD5('message').toString();
// 输出:78e731027d8fd50ed642340b7c9a63b3

md5.png

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...

SHA-256.png


三、对称加密类

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);

AES 加密.png

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"

OR 自定义加密.png


四、非对称加密类

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();
};

RSA 加密.png


五、数字签名类

7. HMAC 签名

功能说明:密钥相关的哈希消息认证码 应用场景:API请求防篡改、Webhook验证

javascript

// 生成HMAC-SHA256签名
const signature = CryptoJS.HmacSHA256(
  'param1=value1&param2=value2', 
  'API_SECRET'
).toString();
​
// 验证签名(后端示例)
const isValid = signature === expectedSignature;

HMAC 签名.png


六、浏览器安全接口

8. Web Crypto API

功能说明:浏览器原生加密标准 应用场景:安全密钥生成、高性能加密

javascript

// 生成AES密钥
crypto.subtle.generateKey(
  { name: "AES-GCM", length: 256 },
  true, 
  ["encrypt", "decrypt"]
).then(key => {
  // 导出密钥
  crypto.subtle.exportKey("raw", key)
});

Web Crypto API.png


七、附加模块

9. URL 安全编码

javascript

// 编码特殊字符
const safeParam = encodeURIComponent('name=张三&age=20');
// 输出:name%3D%E5%BC%A0%E4%B8%89%26age%3D20
​
// 解码
decodeURIComponent(safeParam); 

URL 安全编码.png

10. 加密方式对比表

特性Base64MD5SHA-256AESRSA
可逆性
密钥需求
适合场景编码校验高安全传输非对称
输出长度可变128b256b可变可变
前端性能

📌 关键补充建议

  1. 密钥管理

    javascript

    // 安全存储方案
    sessionStorage.setItem('tempKey', encryptedKey); // 会话级存储
    IndexedDB.saveKey(userMasterKey); // 持久化存储
    
  2. 前后端交互example.com/rsa-flow.pn… (图示:前端公钥加密 → 网络传输 → 后端私钥解密)

  3. 安全实践

    • 敏感操作使用HTTPS
    • 密码存储必须加盐:hash = sha256(password + salt)
    • 定期轮换加密密钥
  4. 性能优化

    javascript

    // Web Worker中运行加密
    const cryptoWorker = new Worker('crypto-worker.js');
    cryptoWorker.postMessage({ data: largeData, type: 'encrypt' });
    

此方案覆盖Web开发中90%的加密需求,开发者可根据实际安全等级要求选择合适的加密方式。

该文章最终解释权归jsjiami官方客服所有

关于js加密等相关问题可咨询jsjiami点com官方客服