Как создать строку хеша с некоторыми специальными правилами в PHP?
Я работаю над проектом, где мне нужно использовать некоторую хеш-функцию для создания строки хеша. Эта строка хеша должна быть уникальной и состоит из 6-13 символов (фиксированная длина).
Я использую базу данных для хранения данных, поэтому для каждой записи у меня есть уникальный идентификатор. Я хочу использовать этот уникальный идентификатор для создания хеш-строки (для достижения уникальности полученной хеш-строки).
Мне нужна эта хеш-строка, состоящая только из допустимых символов ( 0-9 аз. Аз.).
Какую хеш-функцию я должен использовать для достижения этой цели? Как я могу генерировать такие строки хеша?
Добавлено позже: я хочу сгенерировать эту строку и передать ее пользователю, чтобы он мог вернуться позже, чтобы отредактировать запись. любая другая идея приемлема.
3 ответа
Используйте склеп:
$hash = crypt("somevaluetohash", $uniqueid);
Уникальный идентификатор является солью, поэтому вы можете генерировать различные значения в зависимости от идентификатора. Поэтому, если бы у одного пользователя был пароль "somevaluetohash", а у другого - тот же, конечный хэш не был бы таким же.
<?php
$id;
$hash_full = md5($id); //hash('sha256', $id);
$hash_cropped = substr($hash_full, 0, 6);
?>
Используйте hash() для других алгоритмов хеширования.
Но для чего вам нужны эти хеши? Для меня не имеет смысла генерировать хеш из идентификатора, не могли бы вы вместо этого просто использовать идентификатор?
Это действительно должна быть криптографическая контрольная сумма? Или подходит более простая контрольная сумма? Не подходит ли сам первичный ключ, предоставленный базой данных?
У вас есть много вариантов, от самого простого crc32 до самого продвинутого sha512.
Но если вы делаете это для какого-то конкретного приложения (например, хеширования файловой системы или поиска близлежащих объектов с использованием некоторых метрик), то вам придется указать больше вашей проблемы.