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

C#实现AES加密后使用CryptoJS解密返回空字符串问题咨询

问题原因

解密返回空是两个低级错误导致的:

  • 你拿到的密文是Base64编码,结果用CryptoJS.enc.Hex.parse按十六进制格式解析,得到的密文字节流完全不对,这是解密失败的核心原因
  • 手动构造密文对象的写法完全多余,也没显式指定AES模式和填充规则,容易和C#端默认配置不匹配
修复后代码

C#自带的AES类默认用CBC模式、PKCS7填充,直接按下面的写法就能正常解密:

const ciphertext = "0MuDwNoWBFjN/1anszbl0Cxkrwh9ahRwE3c61t7io2c=";
const key = "8beee7ac-42d1-4294-91b8-68cd032cf1e1";
const iv = "9bC_#$/-+%@Kli%1Az=-@qT";

const keyWA = CryptoJS.enc.Utf8.parse(key);
const ivWA = CryptoJS.enc.Utf8.parse(iv);

const decrypted = CryptoJS.AES.decrypt(
    ciphertext, // 直接传Base64字符串就行,CryptoJS会自动解析,不用手动转WordArray
    keyWA,
    {
        iv: ivWA,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    }
);

console.log(decrypted.toString(CryptoJS.enc.Utf8));
踩坑提醒

AES对密钥、IV的长度要求非常严格:128位AES对应16字节密钥+16字节IV,192位对应24字节密钥,256位对应32字节密钥。C#的AES实现如果收到长度不合法的密钥/IV会直接抛异常,如果你跑上面的代码还是解不出来,先去核对C#端是不是对原始key、iv做了额外处理:比如去掉Guid里的横杠、取固定长度的字节、用哈希算法派生密钥之类的,必须保证JS端解析出来的密钥、IV二进制字节和C#端完全一致,不然永远解不对。

内容的提问来源于stack exchange,提问作者The Muffin Man

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:42:28