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

C# AES加密转CryptoJS实现时结果不一致如何解决

AES加密C#与CryptoJS实现结果不一致问题定位与修复

核心问题点

  • IV构造方式错误:C#端的IV是长度为16的字节数组,每个元素占1字节,合计16字节符合AES要求。但CryptoJS的CryptoJS.lib.WordArray.create()接收的数组参数中每个元素代表一个4字节的32位字,直接传入16个单字节值会得到16*4=64字节的IV,和C#端配置完全不匹配,这是加密结果不一致的核心原因。
  • 可选优化:显式指定加密模式与填充规则,避免不同环境默认配置差异导致的异常。

修复后的JS代码

var CryptoJS = require("crypto-js");

// 动态将C#端的字节数组转成符合CryptoJS要求的IV,无需手动计算十六进制
const ivByteArr = [58, 88, 123, 111, 98, 109, 112, 54, 35, 13, 63, 53, 234, 55, 44, 41];
const ivHexStr = ivByteArr.map(byte => byte.toString(16).padStart(2, '0')).join('');
const iv = CryptoJS.enc.Hex.parse(ivHexStr);

var key = "MY_PRIVATE_KEY";

function encrypt(clearText) {
    var keyBytes = CryptoJS.enc.Utf8.parse(key);
    var clearBytes = CryptoJS.enc.Utf8.parse(clearText);

    var encryptedText = CryptoJS.AES.encrypt(
        clearBytes, 
        keyBytes, 
        { 
            iv: iv,
            mode: CryptoJS.mode.CBC, // 显式指定CBC模式,和C#默认AES配置一致
            padding: CryptoJS.pad.Pkcs7 // 显式指定PKCS7填充,和C#默认配置一致
        }
    ).toString();

    return encryptedText;
}

额外校验项

你需要自行确认MY_PRIVATE_KEY字符串UTF8编码后的长度符合AES要求:

  • 16字节:对应AES-128
  • 24字节:对应AES-192
  • 32字节:对应AES-256
    长度不符合的话C#端会直接抛出异常,JS端需保证Key的字节序列和C#端完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:21:01