Используя 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.