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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:48:02