Почему функция AES возвращает другое значение?

Почему 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 имеет значение. В моем случае соль постоянна, и я переключился на другие режимы. Выход все равно каждый раз разный.


person user3081123    schedule 08.09.2014    source источник


Ответы (1)


вектор инициализации, используемый в режиме CBC, представляет собой случайный блок, поэтому каждое шифрование будет отличаться. IV похож на соль, за исключением того, что при шифровании сообщения нет причин когда-либо указывать какой-либо конкретный IV для использования (всегда следует использовать случайный IV). IV часто ставится перед первым блоком зашифрованного сообщения.

person dr jimbob    schedule 09.09.2014
comment
CBC, CFB, CTR, OFB, ЕЦБ. Все эти режимы должны возвращать разные шифры? - person user3081123; 09.09.2014
comment
ECB этого не делает, но это почти всегда неправильный режим для использования, поскольку он не обеспечивает семантической безопасности. Если блоки в открытом тексте сообщения повторяются, то соответствующие блоки в зашифрованном тексте будут повторяться. (Утечка информации об открытом тексте всем, кто смотрит). См. en.wikipedia.org/wiki/Block_cipher_mode_of_operation. - person dr jimbob; 09.09.2014