Максимальный размер текста OpenSSL? - PullRequest
0 голосов
/ 31 мая 2018

Используя OpenSSL, я создал базовый класс шифрования / дешифрования.Моя цель - зашифровать текст (JSON) для отправки по http в / из удаленной веб-службы. (да, я знаю, что мог бы использовать https вместо этого, но есть некоторые технические ограничения, чтобы не использовать его в этом случае)

class Crypt {
   static private $default_method = "aes-256-cbc";

   public static function doEncrypt($text_to_encrypt) {
      // ...some preparation stuff here
      $result = base64_encode(openssl_encrypt($text_to_encrypt, self::$default_method, $seckey, OPENSSL_RAW_DATA, $iv));
      return $result;
    }

   public static function doDecrypt($encrypted_text) {
      // ...some preparation stuff here
      $result = openssl_decrypt(base64_decode($encrypted_text), self::$default_method, $seckey, OPENSSL_RAW_DATA, $iv);

      return $result;
   }
}

Я провел много тестов, используя тексты разныхразмеры и работает нормально.Но ... где предел?

Мои сомнения:

Где предел text_to_encrypt максимальный размер?В моих тестах у меня получилось нормально работать с текстами до 100Мб.С большими текстами я получил ошибку тайм-аута http ... но это из-за моего текущего лимита тест-сервера.Я знаю, что могу изменить его, или я могу искать более мощные серверы, которые будут обрабатываться быстрее.

Если бы у меня была неограниченная пропускная способность, где бы был узкий участок?Что бы установить предел максимального размера text_to_encrypt?В какой-то момент произойдет сбой процесса шифрования / дешифрования?Будет ли предел PHP?

Вот как я тестирую:

define("_MIN_SIZE", 10000); // size of text, in bytes
define("_MAX_SIZE", 250000);    // size of text, in bytes
define("_SIZE_INCREASE", 1033); // size incresase for tests, in bytes

echo '<h2>Test encrypt/decrypt</h2>';
for($i = _MIN_SIZE; $i < _MAX_SIZE; $i = $i + _SIZE_INCREASE){
    $string = generateRandomString($i);
    $encstr = crypt::doEncrypt($string);
    if($string != ($descstr = crypt::doDecrypt($encstr) ) ){
        echo "<p style='color: red'>ERROR!".strlen($string);

    } else {
        echo "<p style='color: green'>OK ".strlen($string);

    }
    echo '</p>';
}
echo '<h2>Done!</h2>';

function generateRandomString($length = 25) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-.,_:;<>çÇ´`ñÑáÁàÀéÉèíÍìÌïÏóÓòÒúÚùÙüÜ¿?=)(/&%$·"!ªº@|¡+[]{}€';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}

Примечание: я знаю, что есть некоторые недостающие части, касающиеся полного потока данных.Т.е. аутентификация, как указано в комментарии, генерация и управление seckey и iv и т. Д.).Но для простоты я не показал весь процесс в этом вопросе.Меня беспокоит вопрос о том, где находится предел размера для шифрования строк в PHP с использованием OpenSSL.

...