Четверг , 25 Апрель 2024
ДомойПубликацииphp и md5 (sha1)

php и md5 (sha1)

Как известно, наверное, многим, md5 представляет из себя «слепок», или, если угодно, «след» строки. на выходе это 16 байтная строка, в идеале уникальная, с одной стороны, для любых 16 байтных строк, а с другой — обеспечивающая существенный разброс значений при малейшем изменении строки-источника.

coding-926242_960_720

К сожалению, алгоритм md5 взломан (автор называет этот метод не иначе, как туннелирование). но ещё остался sha1, который считается взломанным только теоретически (существует доказанный механизм коллизий), но не практически — на их нахождение требуется миллиарды лет.

Но разговор не об этом. в php5 для функции md5 добавлена ещё одна булева переменная. в зависимости от этой переменной, функция возвращает либо 32 байтную строку (символы 0-9a-f), либо 16 байтную. отличие в том, что 32 байтную строку можно свободно применять где и как уходно (хотя бы для создания файлов, например, при организации кеширования sql-запросов ). конечно, чем меньше имя файла, тем удобнее (допустим, чтобы уменьшить вероятность коллизии и, как следствие, перезаписывание или считывание не того файла, его имя можно генерировать как сумму md5+длина_строки = 32 + 2–4 байта).

Теперь вспомним про base64. данный алгоритм создавался для разносторонних возможностей передачи данных по сети. после обработки произвольной строки её размер увеличивается на треть. результирующая строка включает следующие символы: a-zA-Z0-9+/, в качестве дополнителя используется символ = (длина строки должна быть кратна 4 байтам, т. к. из каждых 4 байт при обратном преобразовании получается 3).

Если получить от функции md5 «сырец», прогнать его через base64_encode, то в результате получим 24 символа, а не 32. уже лучше. однако есть одно но: в base64 один из заменяемых символов может быть слешем, что совершенно недопустимо. поэтому нужно просто заменить этот символ любым, допустимым в имени файла (но не входящим в преобразованную строку!). в общем, получится что-то вроде:


$hash = strtr(base64_encode(md5($str, true)), '/', '-');

Теперь эту строку можно оформить в виде функции и использовать в своих проектах.

PS: Всё, что сказанно для md5, актуально и для sha1, с той разницей, что сырец sha1 занимает 20 байтов, а при преобразовании в base64 «вырастает» до 28 (что всё-равно меньше, чем «md5 по умолчанию»).

Рейтинг: 0

Автор публикации

2 070
не в сети 12 месяцев

x64 (aka andi)

Комментарии: 2893Публикации: 405Регистрация: 02-04-2009
Так себеНеплохоХорошоЗамечательноСупер! (Оценок пока нет)
Загрузка...

13 комментариев

  1. Помогите разломать яндексовский реферер с поиска. Там че то типа того, о чем вы написали.

    Рейтинг: 0
    • Насколько знаю, этого ещё никому не удалось. Реферер содержит сигнатуру, но скорее всего, есть дополнительные параметры, известные только ПС. Не зная их, данную задачу сможет решить если только консилиум математиков laugh

      Рейтинг: 0
  2. Так они все сфинкторы laugh Я бы сфинктором не стал(движек сфинкс). Ничего сложного не вижу … Вытащить домены в базу, вытащить из доменов тексты, просеять на ненужные предлоги, запятые, взять за каркас поиска title и после этого растолкать по тематикам?

    Алгоритмика надутуя настолько, что все считают это нереальным. Фактор наигрыша появляется всегда со временем, но если избежать — наговнокодить так, чтобы не заработало невозможно.

    Рейтинг: 0
    • Из этого получится поисковый опкод-кэшер на котором они все встряли(что в нем может быть кроме готовый выборки формулировок?) … это чтобы тысячи серверов не содержать laugh Это не сложно на первый взгляд.

      Рейтинг: 0
    • Чтобы по тематикам растолкать, её сперва нужно определить.
      Если не брать в расчёт дополнительные факторы, то статья «пластиковые окна», состоящая только из этой фразы, повторенной 150 раз, будет в топе. При определении релевантности неплохо бы учесть и полезность страницы для пользователя, дабы топ не забился мусорными или натыренными друг у друга статьями. Раньше в Яндексе/Гугле по 10 страниц просматривал, бывало, и даже больше. А сейчас и на вторую-то редко когда лезу.
      Вряд ли все нереальным считают. Скорее, делятся на тех, кто понимает сложность, и тех, кому это нафиг не нужно laugh

      Рейтинг: 0

Оставить комментарий

Политика конфиденциальности

Наш сайт использует файлы cookies, чтобы улучшить работу и повысить эффективность сайта. Продолжая работу с сайтом, вы соглашаетесь с использованием нами cookies и политикой конфиденциальности.

Принять