Расшифровка Openssl (DES) возвращает false в PHP - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь расшифровать данные с помощью шифрования DES-ECB, но ответ всегда ложный.

Когда я дешифрую строку с помощью https://www.tools4noobs.com/online_tools/decrypt/, ответ правильный.Этот сайт использует функцию "mcrypt_encrypt ()" в PHP, но эта функция не доступна на моем сервере.

Код, над которым я работаю, должен работать в версии PHP 7.1+, поэтому mcrypt_encrypt () больше не доступен в моей системе.

$password         = 'password'; // Example
$decryptedString  = 'ThisShouldBeAnTestToCheckIfTheStringIsCorrectDecryptedThroughDES-ECB'; 

// Encrypted the string through the online tool.
$encryptedString  = 'zOToWEkYOoDnNWZ/sWEgOQQAX97NTZami/3V18yeKmoKiuam3DL0+Pu/LIuvjJ52zbfEx/+6WR4JcCjIBojv0H1eYCDUwY3o';

$opensslDecrypt   = openssl_decrypt(base64_decode($encryptedString),'DES-ECB', $password);

var_dump($opensslDecrypt); // Returns false.

Я также пытался расшифровать без функции base64_decode, но она по-прежнему возвращает false.

Кто-нибудь знает, почему это не такрасшифровываете как должно быть?

1 Ответ

1 голос
/ 26 марта 2019

Вы должны уточнить $options в вызове метода:

Просто добавьте следующий параметр после пароля: OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING , ''

<?php

$password         = 'password';
$decryptedString  = 
'ThisShouldBeAnTestToCheckIfTheStringIsCorrectDecryptedThroughDES-ECB'; 

// Encrypted the string through the online tool.
$encryptedString  =  'zOToWEkYOoDnNWZ/sWEgOQQAX97NTZami/3V18yeKmoKiuam3DL0+Pu/LIuvjJ52zbfEx/+6WR4JcCjIBojv0H1eYCDUwY3o';

$opensslDecrypt   = openssl_decrypt(base64_decode($encryptedString),'DES-ECB', $password, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING , '');

var_dump(trim($opensslDecrypt));

Вывод: string(68) "ThisShouldBeAnTestToCheckIfTheStringIsCorrectDecryptedThroughDES-ECB"

Для получения дополнительной информации об этих параметрах:

Что делает OPENSSL_RAW_DATA?

$ в качестве (как и в 2016 году) двух возможных значений OPENSSL_RAW_DATA и OPENSSL_ZERO_PADDING,Установка обоих параметров может быть выполнена с помощью OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING.Если OPENSSL_ZERO_PADDING не задано, будет выполнено задание по умолчанию PKCS # 7, как это было отмечено комментарием [openssl at mailismagic dot com] в openssl_encrypt ()

https://www.php.net/manual/en/function.openssl-decrypt.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...