У меня есть веб-сайт PHP, который действует как веб-прокси / анонимайзер, и я настроил его, чтобы каждая посещенная страница кэшировалась на моем сервере в течение ограниченного времени. Для большей безопасности я хотел бы закодировать URL-адреса в набор шестнадцатеричных символов, но он должен быть достаточно уникальным, чтобы два URL-адреса никогда не конфликтовали друг с другом ; Имя файла кэшированной страницы будет отражать закодированный URL-адрес, поэтому я не могу допустить их перезапись при посещении другой страницы.
Между тем я использовал это:
$file = str_shuffle(preg_replace("/[^a-zA-Z0-9\s]/", "", urlencode($url))) .".html";
... Но проблема здесь в том, что он всегда случайный и не гарантирует полной уникальности. Я хотел бы сделать так, чтобы пользователи могли добавлять свои URL-адреса в закладки (и повторно посещать их в течение определенного периода времени, без необходимости повторно переходить на страницу). Как я могу сгенерировать такую строку?
1 ответ
Если вам нужна «безопасная», например необратимая , уникальная «кодировка» URL-адреса, вот что хеши для:
$hash = sha1('http://...');
Значение будет уникальным для каждого URL-адреса, два идентичных URL-адреса будут иметь одно и то же значение, они необратимы и для большинства целей и задач являются случайными значениями.
Если вы говорите о кодировке (переходе от одной формы к другой) или шифровании (переходе в другую форму с помощью секретного ключа ), тогда вы говорите об обратимых алгоритмах, и в этом случае результат уникален по определению. Кодирование строки не будет "безопасным", поскольку в ней нет секрета. Шифрование строки настолько безопасно, насколько вы храните секрет.
Итак, у вас есть три варианта:
- кодирование (например,
url_encode
,base64_encode
), которое не является безопасным и обратимым - шифрование (например, AES), которое использует секрет, является безопасным и обратимым
- хеширование (например, SHA1), которое необратимо и, следовательно, безопасно
Все три результата дают уникальные значения (хорошие хэши имеют математически достаточно высокую вероятность для получения уникальных значений).
md5('http://...')
иметь такой же "необратимый" эффект? А что безопаснее?
Похожие вопросы
Новые вопросы
php
PHP — это открытый, мультипарадигмальный, динамически типизированный и интерпретируемый язык сценариев, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.
urlencode
в одиночку. Как вы думаете, почему они будут конфликтовать?/dev/urandom
+base64_encode
?