如何在 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;
}
我尝试设置 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;
}