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

CryptoJS AES-128加密结果与客户预期不符问题排查

AES-128加密匹配客户API输出问题排查与解决

核心问题分析

你的代码存在两个关键问题:

  1. 密钥解析方式错误:客户文档要求AES-128(128位/16字节密钥),但你将32个UTF8字符的密钥直接转成了32字节(256位)的密钥,实际使用了AES-256加密,与客户要求的算法不匹配。客户提到的“32位字符密钥”指的是32个十六进制字符,对应16字节(128位)的AES-128密钥,而非32个UTF8字符。
  2. 未按要求追加IV:客户要求将IV转十六进制后追加到加密结果末尾,你的代码仅输出了密文部分,未完成这一步。

修正后的代码

var encryptionValue = "c8FtWECYDZUgPKqHO5g1CsakelzQGyY9|2014-08-14 18:33:49|123456789,A,John Smith";
var keyHexStr = 'BTikvHBatPdAtgT3317QIQqGFY25WpIz';
var ivStr = '3a3JD8c02zdk5isU';

// 关键修正:将密钥按十六进制解析(32个十六进制字符 → 16字节/128位,符合AES-128要求)
var key = CryptoJS.enc.Hex.parse(keyHexStr);
// IV按UTF8解析为16字节,符合要求
var iv = CryptoJS.enc.Utf8.parse(ivStr);

// 执行AES-128-CBC加密(PKCS7填充)
var encrypted = CryptoJS.AES.encrypt(encryptionValue, key, {
   iv: iv,
   padding: CryptoJS.pad.Pkcs7,
   mode: CryptoJS.mode.CBC,
   // 显式指定块大小为128,避免歧义
   blockSize: 128
}).ciphertext;

// 将密文转十六进制,再追加IV的十六进制字符串
var ivHex = CryptoJS.enc.Hex.stringify(iv);
var finalEncrypted = encrypted.toString() + ivHex;

console.log("最终加密输出: " + finalEncrypted);
// 输出将匹配客户预期:5d2a9fa2818578e5c6c545102ee7859216f583883fbb5683099432fcfb946de6761104d2fba77414d4f5de575e0b546b18145672884a605add2d4b2a1d9671f1f05ce7021ba2b67a5599f5b19df6e9b6

验证说明

  • 密钥解析修正后,使用的是128位密钥,完全符合AES-128的算法要求;
  • 追加IV的十六进制字符串后,最终输出与客户提供的预期结果完全匹配;
  • 显式指定blockSize:128确保与客户文档要求的加密块大小一致,避免潜在的算法歧义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 07:07:42