mcrypt_encrypt в openssl_encrypt ecb des

я должен заменить устаревшую функцию mcrypt_encrypt, используя openssl_encrypt.
Моя старая функция mcrypt использует шифрование des и режим ecb.
Я перепробовал все варианты шифрования (openssl_get_cipher_methods) и не могу найти тот же результат. Помогите, пожалуйста

$key = '04647132';
$message = hex2bin('046471324B3680');
$mcrypt = base64_encode(mcrypt_encrypt('des', $key, $message, 'ecb'));
foreach (openssl_get_cipher_methods(true) as $cipher) {
$openSsl = base64_encode(@openssl_encrypt($message, $cipher, $key, OPENSSL_RAW_DATA));
if ($openSsl == $mcrypt) {
echo 'FOUND - ' . $cipher . ' = ' . $openSsl;
exit;
}
}

0

Решение

Это связано с разным заполнением данных — PKCS # 5 для MCrypt и PKCS # 7 для OpenSSL.

Вы можете предварительно колодки $message самостоятельно (любой стандарт будет работать, но PKCS # 7 лучше) и используйте OPENSSL_ZERO_PADDING флаг вместе с OPENSSL_RAW_DATA, Это также означает, что после расшифровки вы должны вручную удалить заполнение — так обстоит дело со всеми режимами блочного шифрования.

Но это меньше всего твоих проблем …

Никто не должен использовать ECB или DES сегодня; Вы должны отойти от обоих как можно скорее. Это понятно, если вы поддерживаете устаревшую систему, но вам не нужно шифровать новый данные таким образом.
Когда вы в конечном итоге переходите в другой режим, не игнорируйте требование IV — причина, почему ECB плох, именно потому, что он не использует IV.

Кроме того, я знаю, что это просто пример кода, но $key в вашем примере не правильный ключ … используйте random_bytes() генерировать один.

Все это и многие другие проблемы, о которых вы даже не знаете, могут быть решены, если вы просто используете популярную, хорошо проверенную криптографическую библиотеку — она ​​сделает всю работу за вас за один простой шаг.
Пожалуйста, серьезно подумайте об этом — даже профессиональные криптографы предпочитают сторонние библиотеки вместо написания собственного кода, и для этого есть веские причины.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector