Почему AES с одной и той же секретной фразой и сообщением каждый раз возвращает разные значения? Допустим, у нас есть одна и та же соль для каждой функции PBKDF2 (я знаю, что это плохо, это просто для примера). Допустим, мы каждый раз вводим одну и ту же парольную фразу.
var salt = "5J07c/a7+2bf=15$56aQc75Ub55=60&0";
console.log(req.body.password);
console.log(salt);
var PBKDF2hash = crypto.PBKDF2(req.body.password, salt, { keySize: 256/32 });
console.log(PBKDF2hash.toString());
var AEScipher = crypto.AES.encrypt(req.body.password, PBKDF2hash);
console.log(AEScipher.toString());
В этом случае мы получаем тот же PBKDF2hash (как и ожидалось), но каждый раз AES предоставляет другой чипер.
zz
5J07c/a7+2bf=15$56aQc75Ub55=60&0
3949676666ed318087a52896be98dc80b0cad99f4b662d48565283f71a2ace80
U2FsdGVkX19O1pqgL+V6Chk8NdiJQhf15N1uEfYXgxw=
zz
5J07c/a7+2bf=15$56aQc75Ub55=60&0
3949676666ed318087a52896be98dc80b0cad99f4b662d48565283f71a2ace80
U2FsdGVkX1/C7GAmLJvfFAHyOYj7LKZI5278/ZoeA3M=
Эти ответы говорят, что дело в том, что соль отличается, а режим cbc имеет значение. В моем случае соль постоянна, и я переключился на другие режимы. Выход все равно каждый раз разный.