Я хочу кэшировать вещи на диск, и, конечно, то, что я положил на диск, должно быть «безопасным». Я делал некоторые измерения: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
a) Вы сравниваете яблоки и апельсины. md5 и crc32 не * кодируют * ничего, они создают ** хэш **. base64, с другой стороны, * кодирует * и может быть * декодирован * и имеет длину, зависящую от входной длины. что непригодно для индексации. (плюс вы могли бы просто использовать сам ввод с тем же результатом и лучшей производительностью). b) определить «быть безопасным»? c) Разве вы не думаете, что использование существующего механизма кеширования будет гораздо более эффективным, чем использование собственного? d) «есть ли какой-либо более быстрый метод» - это ** просьба рекомендовать ресурс **, и поэтому OT –
CRC32 и MD5 являются алгоритмами хеширования, в которых вы никогда не сможете вернуть исходные данные, но проверьте его целостность. Base64 представляет собой схему кодирования для представления двоичных данных с печатными символами, которые могут быть возвращены. Они делают совершенно разные вещи. Что ты хочешь делать? –
@king_nak, хорошо, это не имеет значения, если кодирование или хеширование. Я просто хочу преобразовать строки в такую форму, чтобы они могли быть сохранены на диске безопасно –