You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中使用CryptoJS实现AES加密结果不符问题求助

AES加密结果不符原因排查与解决方案

问题原因分析

  1. 密钥长度与处理错误
    你当前将SHA256哈希结果转为十六进制字符串后截取前31位,再通过CryptoJS.enc.Utf8.parse生成密钥。但:

    • SHA256原生输出是32字节(256位),完全符合AES-256的密钥长度要求
    • 转为十六进制字符串后会变成64个字符,截取31位再转Utf8仅得到31字节,密钥长度不足256位,直接导致加密逻辑偏离预期
    • 你更新信息中的密钥6779b2624c837845a4ec16e7cd1fa40是31个字符,进一步验证了这个错误
  2. 加密输入处理冗余(非核心但需规范)
    CryptoJS.AES.encrypt可以直接接受字符串作为明文输入,无需先通过CryptoJS.enc.Utf8.parse转换,冗余操作虽不直接导致错误,但会增加代码复杂度

修正后的代码

let keyTool = {
  "vector": "njdsslndlsnlkds",
  "keySource": "abchjkolg@#!djfhrye"
};

// 正确生成256位密钥:直接使用SHA256哈希后的WordArray,无需转字符串截断
let key = CryptoJS.SHA256(keyTool.keySource);
let iv = CryptoJS.enc.Utf8.parse(keyTool.vector);

// 直接传入明文字符串,CryptoJS会自动处理编码
let encrypted = CryptoJS.AES.encrypt("abc@gmail.com", key, {  
  iv: iv, 
  mode: CryptoJS.mode.CBC, 
  padding: CryptoJS.pad.Pkcs7 
});

console.log(encrypted.toString()); // 此时应匹配预期结果

验证说明

  • 修正后密钥严格为256位(32字节),符合AES-256的要求
  • 保留了正确的IV、CBC模式和PKCS7填充配置
  • 简化了明文输入的处理逻辑,避免不必要的编码转换

内容的提问来源于stack exchange,提问作者mediocreCoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 11:33:01