Какая самая быстрая комбинация сжатия + кодирования + проверки + сериализации массива? - PullRequest
1 голос
/ 25 января 2012

Мне нужна комбинация функций, которая выполняет:

  • сериализация массива (без объекта, маленький - 3-7 пар ключ-значение строк, без ссылок)
  • достоверность данныхпроверка выше (лучше ли, чтобы хеш был внутри массива?)
  • шифрование выше (есть ли метод шифрования, который проверяет дешифрованную информацию?)
  • сжатие выше (яне уверен, стоит ли стоимость: пропускная способность / время процессора)

... массива.

Все должно быть оптимизировано для скорости.

Для сериализациимассив я думал об использовании json_encode (), а не serialize (), потому что это быстрее.См. Предпочтительный способ хранения массивов PHP (json_encode vs serialize) .

Для проверки достоверности данных я думал об использовании sha1 (), но я рассматриваю crc32, потому что это быстрее, и я неЯ думаю, что столкновения близки.См. Самый быстрый хеш для некриптографического использования? .

Для шифрования я сделал:

<?php

function encode($pass, $data) {
  return mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $pass, $data, MCRYPT_MODE_ECB);
}

function decode($pass, $data) {
  return mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $pass, $data, MCRYPT_MODE_ECB);
}

$rand = str_repeat(rand(0, 1000), 5);

$start = microtime(true);
for($i = 0; $i <= 10000; $i++){
  encode('pass', $rand);
}

echo 'Script took ' . (microtime(true) - $start) . ' seconds for encryption<br/>';

$start = microtime(true);
for($i = 0; $i <= 10000; $i++){
  encode('pass', $rand);
}

echo 'Script took ' . (microtime(true) - $start) . ' seconds for decryption';

Результаты:

Script took 1.8680129051208 seconds for encryption
Script took 1.8597548007965 seconds for decryption

Я быскорее избегайте любой случайности.Я знаю, что режим CBC более безопасен, но он также медленнее.

Для сжатия я понятия не имею, что лучше использовать, учитывая тот факт, что полученная строка является двоичной и короткой.

Есть ли сжатие, которое не требует кодирования, чтобы установить результирующую строку как cookie?Я знаю, что sha1 (), например, возвращает только цифры и буквы.

Это сложный вопрос.Поэтому не стесняйтесь указывать на что-то неправильное или неточное.Он содержит много тем, но в основном короткий вопрос заключается в том, как безопасно и быстро зашифровать / расшифровать массив при небольшом его представлении.

Это правильный порядок?

Требуется ли проверка данныхучитывая, что существует высокая вероятность того, что результирующий JSON не будет действительным в случае изменения данных?

Есть ли функция, которая уже объединяет эти или некоторые из этих функций?

Ответы [ 2 ]

3 голосов
/ 25 января 2012

Я знаю, что режим CBC более безопасен, но он также медленнее

Чем ЕЦБ? Только если данные больше пары блоков.

Если вам нужен самый быстрый алгоритм шифрования, тогда ничто не заменит его самому тестированию - как ни странно, реализация PHP sha1 () значительно быстрее, чем его md5 () (я знаю, что это хэши - это должно показать, что производительность зависит от реализация столько же, сколько алгоритм).

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

, чтобы установить результирующую строку как cookie

Звучит так, будто вы используете много необычного шифрования, чтобы скрыть базовую небезопасность вашего приложения - оно, вероятно, будет открыто для атак воспроизведения. И у вас есть дополнительное усложнение обеспечения того, что ваши данные помещаются в cookie. Почему бы просто не использовать сеанс на стороне сервера со случайным значением, отправляемым на стороне клиента (вам не нужно использовать обработчик сеанса PHP, если вы хотите реализовать функцию типа "запомнить меня" и при этом все еще имеете обычный сеанс).

0 голосов
/ 25 января 2012

На мой взгляд, было бы достаточно использовать только сжатие.Для обратного проектирования компрессии потребуется много времени.Я могу рекомендовать компрессию Хаффмана.

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