Обработка исключений для openssl расшифровывать в php - PullRequest
0 голосов
/ 05 мая 2018

Мне нужна помощь для расшифровки алгоритма в php.

Я получаю сообщение об ошибке при передаче неверных зашифрованных данных в моей функции расшифровки. поэтому мне нужно обработать ошибку с помощью исключения. это возможно?

Я пытался этот код, но не повезло

function decrypt($encrypt_data) {
    $key = ENC_KEY;
    $encryption_key = base64_decode($key);
    list($encrypted_data, $iv) = explode('::', base64_decode($encrypt_data), 2);

    try {
      if(openssl_decrypt($encrypted_data, 'aes-256-cbc', $encryption_key, 0, $iv)) {
          throw new customException($encrypted_data);
      }
    }

    catch (customException $e) {
      echo $e->errorMessage();
    }

 }

Но эта функция выдает мне ошибку: -

Предупреждение: openssl_decrypt (): длина передаваемого IV составляет всего 7 байтов, шифр ожидает IV ровно 16 байтов, заполнение \ 0 в abc.php

1 Ответ

0 голосов
/ 06 мая 2018

Поскольку Магнус указывает , ключ и IV должны быть определенного размера для AES в режиме CBC. Размер ключа должен быть 32 байта для AES-256, а IV идентичен размеру блока: 16 байтов.

Обычно любой язык проверяет размер ключа и IV перед его использованием, но PHP имеет неприятную привычку (как для OpenSSL, так и для mcrypt API) заполнять его нулями, если он слишком мал или вырезать его часть когда он слишком большой. Вероятно, это связано с тем, что лежащие в основе C-библиотеки не проверяют размер, поскольку ключ и IV передаются как указатели, а не как массивы или объекты.

Чтобы исправить это, вы должны убедиться, что ключ содержит ровно 32 рандомизированных байта (очевидно, это потому, что предупреждения нет) и что IV состоит из ровно 16 рандомизированных байтов.


Обратите внимание, что требование безопасности для режима CBC, что IV состоит из 16 байтов, которые полностью непредсказуемы для противника. Поэтому не рекомендуется просто исправлять ошибку, добавляя IV к нулям самостоятельно. Хотя использование 7 байтов в качестве IV вряд ли приведет непосредственно к эксплойтам, вам следует исправить протокол , а не полагаться на обходные пути в коде .

Как указано, другие криптографические API (для разных языков) будут строго предписывать использовать ключи и IV правильного размера; если вы продолжаете использовать 7-байтовый IV, то для всех этих сред выполнения могут потребоваться обходные пути.

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