如何在Postman中用CryptoJS实现匹配C#逻辑的AES-128 CBC加密
问题分析
你的代码有三个核心问题导致报错且结果不匹配C#逻辑:
- 密钥格式不兼容:CryptoJS的加密接口要求密钥和IV都为
CryptoJS.lib.WordArray类型,你将密钥转为Uint8Array传入,CryptoJS无法识别,直接导致加密环节报错。 - 输出逻辑不匹配:C#的逻辑是先拼接16位IV到密文最前面,再整体转Base64输出,你现有代码直接输出加密后的密文Base64/转Hex,完全不符合C#的输出规则。
- 冗余参数错误:AES算法的BlockSize固定为128位不需要额外配置,keySize会根据你传入的密钥长度自动识别,多余传入的参数反而可能引发兼容问题。
修正后可直接运行的Postman CryptoJS代码
var CryptoJS = require("crypto-js"); // 配置参数和C#完全对齐 const data = "ASD_POC"; const aesKeyBase64 = "OxLDVPTHLk5EHR5AE8O0rg=="; // 直接将Base64格式的密钥转为CryptoJS支持的WordArray const key = CryptoJS.enc.Base64.parse(aesKeyBase64); // 随机生成16字节IV,对应C#的GenerateIV() const iv = CryptoJS.lib.WordArray.random(16); // 加密函数 function encrypt(plainText, key, iv) { const plainTextWordArray = CryptoJS.enc.Utf8.parse(plainText); const encrypted = CryptoJS.AES.encrypt( plainTextWordArray, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 } ); // 拼接IV和密文:对应C#的Array.Copy拼接逻辑 const combined = iv.clone().concat(encrypted.ciphertext); // 整体转Base64输出,和C#最终输出格式完全一致 return combined.toString(CryptoJS.enc.Base64); } // 调用输出 const encryptResult = encrypt(data, key, iv); console.log("加密结果:", encryptResult); // 可直接写入Postman环境变量供请求调用 pm.environment.set("encrypt_token", encryptResult);
逻辑对齐说明
每次运行结果不同为正常现象:因为IV是随机生成的,和C#逻辑一致,解密时只要从密文前16位取出IV即可正常解密,加密参数100%匹配你提供的C#实现规则。
内容的提问来源于stack exchange,提问作者Oleg L
相关产品推荐
相关产品推荐

