将Java(BouncyCastle)移植到NodeJs(CryptoJS)

将Java(BouncyCastle)移植到NodeJs(CryptoJS),java,node.js,cryptography,bouncycastle,cryptojs,Java,Node.js,Cryptography,Bouncycastle,Cryptojs,我目前正在尝试使用BouncyCastle将以下代码从Java移植到使用CryptoJS的NodeJs(但我愿意为NodeJs使用不同的库) 唯一重要的是,代码的结果是相同的 爪哇: 此代码提供以下输出: 00000000000000000000000000000000 3CC30001008004DE5F1EACC0403D0000 3FB5F6E3A807A03D5E3570ACE393776F NodeJs: const CryptoJS = require('crypto-js');

我目前正在尝试使用BouncyCastle将以下代码从Java移植到使用CryptoJS的NodeJs(但我愿意为NodeJs使用不同的库)

唯一重要的是,代码的结果是相同的

爪哇:

此代码提供以下输出:

00000000000000000000000000000000
3CC30001008004DE5F1EACC0403D0000
3FB5F6E3A807A03D5E3570ACE393776F
NodeJs:

const CryptoJS = require('crypto-js');

const kSdm = '00000000000000000000000000000000';
console.log(kSdm);
const sv2 = '3CC30001008004DE5F1EACC0403D0000';
console.log(sv2);
const kSes = encrypt(kSdm, sv2);
console.log(kSes);

function encrypt(key, data) {
    const ciphertext = CryptoJS.AES.encrypt(
        CryptoJS.enc.Hex.parse(data),
        CryptoJS.enc.Hex.parse(key),
        {
            padding: CryptoJS.pad.NoPadding,
            mode: CryptoJS.mode.CBC,
            iv: CryptoJS.enc.Hex.parse(key)
        },
    ).toString();
    return Buffer.from(ciphertext, 'base64').toString('hex');
}
但这段代码给了我:

00000000000000000000000000000000
3CC30001008004DE5F1EACC0403D0000
42808a1bc75ba899a50471b1c6c1bbe3
42808a1bc75ba899a50471b1c6c1bbe3
NodeJs-选项2:

var key = new Buffer('00000000000000000000000000000000', 'hex');
var src = new Buffer('3CC30001008004DE5F1EACC0403D0000', 'hex');
cipher = crypto.createCipheriv('aes-128-cbc', key, Buffer.alloc(0));
cipher.setAutoPadding(false);
result = cipher.update(src).toString('hex');
result += cipher.final().toString('hex');
console.log(result);
也给了我:

00000000000000000000000000000000
3CC30001008004DE5F1EACC0403D0000
42808a1bc75ba899a50471b1c6c1bbe3
42808a1bc75ba899a50471b1c6c1bbe3
因此产生的输出

  • Java:3FB5F6E3A807A03D5E3570ACE3393776F
  • 节点编号:42808a1bc75ba899a50471b1c6c1bbe3
  • 节点JS选项2:42808a1bc75ba899a50471b1c6c1bbe3
不同

有人知道我怎么解决这个问题吗?正如我所说,我愿意使用任何其他NodeJS加密库,如jsrsasign等


感谢您的帮助:)

crypto js没有实现AES-CMAC算法,因此您得到了不同的结果。 我找到了一个。使用这个,我得到了预期的输出

参考代码:

var aesCmac = require('node-aes-cmac').aesCmac;
 
 
// Example with buffers.
var bufferKey = Buffer.from('00000000000000000000000000000000', 'hex');
var bufferMessage = Buffer.from('3CC30001008004DE5F1EACC0403D0000','hex');
var options = {returnAsBuffer: true};
cmac = aesCmac(bufferKey, bufferMessage, options);

console.log("cmac "+ Buffer.from(cmac, 'base64').toString('hex')) ;

**Output** 

cmac 3fb5f6e3a807a03d5e3570ace393776f

很高兴我能帮忙!!