2017-01-09 2 views
-3

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

foreach (['md5', 'crc32', 'base64_encode'] as $item) 
{ 
    $m = microtime(true); 
    for ($i = 1; $i < 1000000; $i++) 
    { 
     $a = 'adat'.str_repeat('x', mt_rand(10, 1000)); 
     $a = $item($a); 
    } 
    echo $item.'<br>'; 
    echo microtime(true)-$m; 
    echo '<hr>'; 
} 

результаты:

md5 
1.9821128845215 
crc32 
1.8771071434021 
base64_encode 
1.110063791275 

так base64_encode выиграл, но он генерирует длинную строку, так что его легко превысить лимит 256 символов. Есть ли более быстрый метод кодирования, о котором я не знаю? Это не должно быть би-directioned

+2

a) Вы сравниваете яблоки и апельсины. md5 и crc32 не * кодируют * ничего, они создают ** хэш **. base64, с другой стороны, * кодирует * и может быть * декодирован * и имеет длину, зависящую от входной длины. что непригодно для индексации. (плюс вы могли бы просто использовать сам ввод с тем же результатом и лучшей производительностью). b) определить «быть безопасным»? c) Разве вы не думаете, что использование существующего механизма кеширования будет гораздо более эффективным, чем использование собственного? d) «есть ли какой-либо более быстрый метод» - это ** просьба рекомендовать ресурс **, и поэтому OT –

+0

CRC32 и MD5 являются алгоритмами хеширования, в которых вы никогда не сможете вернуть исходные данные, но проверьте его целостность. Base64 представляет собой схему кодирования для представления двоичных данных с печатными символами, которые могут быть возвращены. Они делают совершенно разные вещи. Что ты хочешь делать? –

+0

@king_nak, хорошо, это не имеет значения, если кодирование или хеширование. Я просто хочу преобразовать строки в такую ​​форму, чтобы они могли быть сохранены на диске безопасно –

ответ

1

Попробуйте это:

$hashValue = hash('tiger160,3', $string); 

тигра имеет хорошую длину и хорошую скорость.

Также in php manual вы можете найти полезные комментарии, описывающие особенности различных алгоритмов хеширования.

+0

спасибо, но crc32 чуть быстрее этого –

+0

Но этого может быть недостаточно. crc32 - 8 символов и тигр160,3 - 40 символов. Это зависит от требований и конкретной задачи. –

Смежные вопросы