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

Node.js复现Java BouncyCastle AES/EAX/NoPadding加密等效算法问询

Node.js 兼容BouncyCastle AES/EAX/NoPadding加密实现方案

核心结论

Node.js 原生crypto模块没有内置AES-EAX模式支持,你当前代码里用的aes-128-gcm属于GCM认证加密模式,和EAX的认证逻辑、密文生成规则完全不兼容,输出的密文无法被Java端的AES/EAX/NoPadding逻辑解密。

现有代码兼容问题

你贴出的两份代码除了算法选型错误,还有两个容易导致解密失败的细节偏差:

  1. 盐值生成逻辑不对齐:Java端先创建16字节默认填0的字节数组,再把固定字符串的字节内容拷贝进去;你当前Node.js代码直接用subarray(0,16)截取字符串Buffer,若字符串实际长度不足16字节,得到的盐值长度不够,会导致PBKDF2派生的密钥完全不一致。
  2. 密文结构不对齐:Java端cipher.doFinal()返回的结果结构是密文内容 + 16字节认证标签,不包含IV;你当前代码把IV拼在密文最前面,Java端解密时会把前8字节IV当成密文处理,直接解密失败。

可运行的兼容实现

AES-EAX是基于CTR流模式+CMAC消息认证码的AEAD加密算法,BouncyCastle实现的默认参数为128位认证标签长度、支持可变长度Nonce(即你代码里定义的8字节IV)。不需要手写算法逻辑,使用成熟的第三方EAX实现库即可完成兼容。

实现代码

  1. 安装依赖
npm install aes-eax
  1. 加密逻辑(所有参数和Java端严格对齐)
const crypto = require('crypto');
const AesEax = require('aes-eax');

function encrypt(plaintext, password) {
    // 盐值逻辑完全对齐Java:16字节定长,不足位补0
    const salt = Buffer.alloc(16);
    const saltBytes = Buffer.from('SaltString1234!', 'utf8');
    saltBytes.copy(salt, 0, 0, Math.min(saltBytes.length, 16));

    // 密钥派生参数完全对齐:PBKDF2WithHmacSHA1、迭代1000次、128位密钥、NFC格式密码归一化
    const secretKey = crypto.pbkdf2Sync(
        password.normalize('NFC'),
        salt,
        1000,
        16,
        'sha1'
    );

    // IV长度保持和Java端一致:8字节
    const iv = crypto.randomBytes(8);

    // 初始化EAX加密器,标签长度16字节,匹配BouncyCastle默认配置
    const cipher = AesEax.createCipheriv(secretKey, iv, { tagLength: 16 });
    const ciphertext = cipher.update(Buffer.from(plaintext, 'utf8'));
    const authTag = cipher.finish();

    // 返回结构和Java doFinal输出完全一致:密文+认证标签,默认不拼接IV
    // 如果你的存量解密逻辑约定IV放在密文头部传输,再调整拼接顺序即可
    return Buffer.concat([ciphertext, authTag]);
}

注意事项

  • 禁止用GCM、CCM等其他AEAD模式代替EAX,不同认证模式的标签生成算法完全不同,不存在跨模式兼容性。
  • 所有参数必须严格对齐:包括盐值的每一个字节、PBKDF2迭代次数、密钥长度、IV长度、认证标签长度,任意参数偏差都会导致解密失败。
  • IV不需要手动补位,EAX模式原生支持可变长度Nonce,保持8字节长度即可和Java端逻辑匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:06:40