JavaScript中的AES加密与解密:原理、代码与实战

246 阅读2分钟

WX20231204-144436@2x.png

前言

关于有js加密、js解密,js业务相关,找jsjiami官网站长v。

另外前段时间做了个单子跑单了,出售TEMU助手。eller点kuajingmaihuo点com的全自动化助手,可以批量合规,批量实拍图,批量资质上传等。

一、AES加密技术简介

AES(Advanced Encryption Standard)是一种对称加密算法,由美国国家标准与技术研究院(NIST)于2001年发布,取代了旧的DES标准。其核心特点包括:

  • 分组加密:数据被切分为128位(16字节)的块进行处理
  • 密钥可变:支持128/192/256位密钥长度
  • 多模式支持:如CBC、ECB等,满足不同场景需求

2025年05月03日-1.png


二、JavaScript实现原理

1. 核心参数解析

CryptoJS.AES.encrypt( 明文, 密钥, {
  iv: 初始向量,      // CBC模式必需 
  mode: 加密模式,    // 如CryptoJS.mode.CBC  
  padding: 填充方式 // 如PKCS7
})
  • 密钥管理:需保证前后端密钥一致,推荐256位高强度密钥

  • 工作模式

    • CBC:链式加密,需配合IV提升安全性(推荐)
    • ECB:简单模式,相同明文生成相同密文(存在安全隐患)

2. 加密流程拆解

以CBC模式为例:

  1. 明文按PKCS7规则填充至128位倍数
  2. 生成随机初始化向量(IV)
  3. 执行多轮字节替换、行移位等混淆操作
  4. 每轮与扩展后的轮密钥进行异或运算

三、JavaScript代码案例

案例1:带IV的CBC模式加密

// 加密 
const key = CryptoJS.enc.Utf8.parse("1234567890123456");  // 16字节密钥 
const iv = CryptoJS.enc.Utf8.parse("0123456789ABCDEF"); 
const encrypted = CryptoJS.AES.encrypt("Hello  World", key, { 
  iv: iv,
  mode: CryptoJS.mode.CBC, 
  padding: CryptoJS.pad.Pkcs7 
}).toString();
 
// 解密 
const decrypted = CryptoJS.AES.decrypt(encrypted,  key, {
  iv: iv,
  mode: CryptoJS.mode.CBC, 
  padding: CryptoJS.pad.Pkcs7 
}).toString(CryptoJS.enc.Utf8); 

案例2:ECB简单模式加密

// 无IV的加密 
const encrypted = CryptoJS.AES.encrypt( 
  CryptoJS.enc.Utf8.parse("SecretData"), 
  CryptoJS.enc.Hex.parse("2b7e151628aed2a6abf7158809cf4f3c"),  // 256位密钥 
  { mode: CryptoJS.mode.ECB  }
).ciphertext.toString(); 

2025年05月03日-2.png


四、开发注意事项

  1. 密钥安全:禁止硬编码密钥,建议通过HTTPS传输
  2. IV生成:必须使用强随机数生成器
  3. 模式选择:优先选择CBC/CTR等安全模式,避免ECB
  4. 编码统一:前后端需约定字符编码(推荐UTF-8)
  5. 性能优化:长文本建议分段处理(如每16MB分块)

五、安全增强建议

  • 结合RSA传输AES密钥实现混合加密
  • 定期更换密钥(建议每月轮换)
  • 添加HMAC签名验证密文完整性
  • 使用Web Cryptography API实现浏览器原生加密

通过合理运用AES加密,可有效防御中间人攻击(MITM),保护用户敏感数据。实际开发中建议使用成熟的加密库(如crypto-js),避免重复造轮子带来的安全隐患。