#php #wordpress
Вопрос:
Я использую платежный шлюз для WordPress, и в нем есть приведенный ниже код для создания шифрования для банка:
private static function encrypt_tripledes($data, $secret)
{
$method = 'DES-EDE3';
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($method));
$encrypted = openssl_encrypt($data, $method, $secret, 0, $iv);
return $encrypted;
}
Проблема в том, что openssl_cipher_iv_length
возвращается 0, и весь плагин и WordPress вылетают, когда он хочет перенаправить на веб-сайт банковских платежей. как я могу решить эту проблему?
Вот сообщение об ошибке, когда оно хочет перенаправить в банк:
Fatal error: Uncaught Error: Length must be greater than 0
Комментарии:
1. Режим «DES-EDE3» является синонимом тройного DES с режимом ECB — режимы ECB, как правило, не используют IV, поэтому PHP/OpenSSL возвращает нулевую длину.
2. @MichaelFehr Спасибо за ваш ответ. Но этот точный код некоторое время работал правильно, и внезапно он сломал всю систему. Я проверил все параметры, которые изменяются при обновлении, и единственное, что было, это версия PHP и версия WordPress…
3. Возможно, в более старых версиях PHP возврат всегда был «8», когда алгоритм начинается с «DES», а в более новых версиях они решили вернуть «ноль», когда алгоритмы указывают на режим ECB.
4. @MichaelFehr Понижение версии PHP также не сработало 🙁
5. Другими словами: PHP работает правильно, так как алгоритм шифрования «DES-EDE3» означает использование алгоритма DES в режиме ECB — режим ECB в целом не использует или не требует вектора инициализации, поэтому PHP возвращает длину «0» (означает, что не требуется или не требуется. Теперь у вас есть два варианта: использовать режим, для которого требуется капельница (например, режим CBC) ИЛИ не используйте капельницу.