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

Node.js AES-ECB加密与C#解密适配问题:填充无效报错求助

Node.js AES-ECB加密与C#/Python兼容问题解决方案

问题根源

你的Node.js代码存在三个致命错误,直接导致和C#、Python的加解密流程完全不匹配:

  • 密钥处理错误:crypto.createCipher会通过密码推导密钥(采用OpenSSL的EVP_BytesToKey算法),但C#和Python都是直接使用Base64解码后的原始密钥,两者生成的密钥完全不同。
  • AES版本不匹配:C#明确配置了KeySize=128(即AES-128),但Node.js代码里用的是aes-256-ecb,密钥长度不匹配会触发填充校验失败。
  • 变量名笔误:函数参数是requestData,但代码里误用了未定义的requestedData,会直接导致运行时错误。

修正后的Node.js加密代码

import crypto from 'crypto';

export function AESEncryption(requestData: string, sessionKey: string) {
    // 解码Base64格式的密钥,和C#/Python保持一致逻辑
    const key = Buffer.from(sessionKey, 'base64');
    
    // 根据密钥长度自动匹配AES版本:16字节对应AES-128,32字节对应AES-256
    const algorithm = key.length === 16 ? 'aes-128-ecb' : 'aes-256-ecb';
    
    // ECB模式不需要IV,使用createCipheriv直接传入原始密钥
    const cipher = crypto.createCipheriv(algorithm, key, null);
    
    // 默认采用PKCS7填充,和C#/Python的填充规则完全一致
    let encryptedData = cipher.update(requestData, 'utf-8', 'base64');
    encryptedData += cipher.final('base64');
    
    return encryptedData;
}

Node.js解密代码(用于验证C#/Python加密的数据)

如果需要用Node.js解密C#或Python加密的内容,可以用以下代码:

export function AESDecryption(cipherText: string, sessionKey: string) {
    const key = Buffer.from(sessionKey, 'base64');
    const algorithm = key.length === 16 ? 'aes-128-ecb' : 'aes-256-ecb';
    
    const decipher = crypto.createDecipheriv(algorithm, key, null);
    
    let decryptedData = decipher.update(cipherText, 'base64', 'utf-8');
    decryptedData += decipher.final('utf-8');
    
    return decryptedData;
}

关键注意事项

  1. 密钥长度必须一致:C#里你设置了KeySize=128,所以sessionKey经过Base64解码后必须是16字节(Base64编码后长度约24字符)。如果要改用AES-256,需要把C#的KeySize改成256,同时密钥长度改为32字节。
  2. ECB模式安全性警告:ECB模式是不安全的,相同明文块会生成相同密文块,容易被破解。建议尽快切换到CBC或GCM模式(这两种模式需要使用随机IV,IV不需要保密,但要和密文一起传递)。
  3. 填充规则一致性:Node.js的crypto模块默认使用PKCS7填充,和C#的PaddingMode.PKCS7、Pythonpycryptodome库的pad函数默认规则完全匹配,不需要额外调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 23:50:28