У меня есть этот вызов mcrypt_encrypt
для заданных $key
, $message
и $iv
:
$string = mcrypt_encrypt(MCRYPT_3DES, $key, $message, MCRYPT_MODE_CBC, $iv);
Я хотел бы изменить вызов mcrypt_encrypt
на вызов openssl_encrypt
, чтобы обеспечить это в будущем.
Имея $mode = 'des-ede3-cbc'
или $mode = '3DES';
и $options = true
, я получаю более похожий ответ, но не идентичный. Есть ли другой способ назвать это, чтобы получить идеальное совпадение?
Я получаю это (base64_encoded) для комбинаций lorem-ipsum $message
+$key
, поэтому я начинаю верить, что одна функция или другая дополняют сообщение перед шифрованием...
для mcrypt
"Y+JgMBdfI7ZYY3M9lJXCtb5Vgu+rWvLBfjug2GLX7uo="
для для openssl
"Y+JgMBdfI7ZYY3M9lJXCtb5Vgu+rWvLBvte4swdttHY="
Попытка использовать $options для передачи OPENSSL_ZERO_PADDING, но передача чего-либо, кроме 1 (OPENSSL_RAW_DATA или true), приводит к ошибке пустой строки...
Ни OPENSSL_ZERO_PADDING
, ни OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING
не работают... :( Я использую "OpenSSL 1.0.2g 1 марта 2016".
Уже прочитал этот вопрос и ответ, но он мне не помогает. Не только один с проблемами заполнения, но нет решение пока видно. (Второй ответ говорит о добавлении дополнения к вызову mcrypt, я действительно хотел бы удалить дополнение из вызова шифрования openssl...
openssl_encrypt
управляет заполнением. Вы можете зашифровать с помощью$encrypted = openssl_encrypt($data, $alg, $key, OPENSSL_ZERO_PADDING, $iv);
и проверить, получите ли вы тот же результат. На www.php.net/openssl_encrypt вы можете прочитать комментарии, чтобы увидеть, как использовать 4-й параметр. - person Mjh   schedule 16.12.2016OPENSSL_ZERO_PADDING
не работает, по крайней мере, для меня ... но да, заполнение - вот почему вы не можете получить тот же результат. Тем не менее, в вашей схеме шифрования так много ошибок, что вы можете просто заменить ее новой - пожалуйста, используйте для этого библиотеку, а не сворачивайте свою собственную. - person Narf   schedule 16.12.2016mcrypt_create_iv()
. - person Daniel W.   schedule 16.01.2017