2013-11-22 3 views
0

У меня есть рабочий код для создания шифровать данные с помощью PHP:Triple DES вектор инициализации

$cipher_alg = MCRYPT_TRIPLEDES; 
$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher_alg,MCRYPT_MODE_ECB), MCRYPT_RAND); 
$encrypted_string = mcrypt_encrypt($cipher_alg, $pKey, $string, MCRYPT_MODE_ECB, $iv); 

Вопрос, я запускаю этот код несколько раз, если те же входы и всегда дают мне тот же результат для $encrypted_string и другой выход для $iv. Итак, почему мои данные шифрования всегда одинаковы, если меняется IV?

Спасибо в продвижении.

ответ

1

ECB mode не использует IV, поэтому не имеет значения, что вы проходите, или что каждый раз он отличается. Документация для самого mcrypt_encrypt косвенно говорит так:

iv

Используется для инициализации в CBC, CFB, OFB режимах, а также в некоторых алгоритмах в режиме STREAM. Если вы не поставляете IV, тогда как для алгоритма требуется , функция выдает предупреждение и использует IV со всеми его байтами, установленными в «\ 0».

Вам нужно будет использовать цепной режим (CBC и т. Д.), Чтобы увидеть разные результаты на каждой итерации - и, в общем, режим ECB - очень плохой выбор. Не используйте его.

Смежные вопросы