如何在 crypto-js 中生成相同的 AES 加密消息?

How to generate the same AES encrypted message in crypto-js?

我尝试设置 iv 或不设置 iv,但加密的消息总是不同。

import CryptoJS from "crypto-js";
const iv = CryptoJS.lib.WordArray.create([0x20212223, 0x24252627, 0x28292a2b, 0x2c2d2e2f]);
const a = CryptoJS.AES.encrypt("my message", "my secret", {iv: iv}).toString();
console.log(a);

一些输出是 U2FsdGVkX1/7vfxMQ5nTdcBqjLjirF5LutKPUpPKkxI=U2FsdGVkX18+075efZU5tMZyIziirm0e6O6u4ZPXVcA=

“我的秘密”是密码,不是密钥。 CryptoJS.AES.encrypt 正在执行密钥派生函数(内部)以从密码派生密钥。密钥派生函数的输入之一是随机生成的盐。因此,每次 运行 CryptoJS.AES.encrypt 时派生的密钥都是不同的,即使输入相同,这就是为什么每次 运行 都会得到不同的结果。

有关如何将密钥而不是密码传递给 CryptoJS.AES.encrypt 的示例,请参阅 。这消除了对密钥派生函数的需要,每次你都会得到相同的结果。

var algorithm = 'aes256';

 // Encrypt

function Encrypt(word, key) { 
var cipher = crypto.createCipher(algorithm, key);
var encrypted = cipher.update(word, 'utf8', 'hex') + cipher.final('hex');
return encrypted;
}

 //Decrypt

function Decrypt(word, key) {
var decipher = crypto.createDecipher(algorithm, key);
var decrypted = decipher.update(word, 'hex', 'utf8') + 
decipher.final('utf8');  
return decrypted;
}