Как создать строку хеша с некоторыми специальными правилами в PHP? - PullRequest
2 голосов
/ 05 июля 2010

Я работаю над проектом, где мне нужно использовать некоторую хеш-функцию для создания строки хеша.Эта хеш-строка должна быть уникальной и состоит из 6-13 символов (фиксированной длины).

Я использую базу данных для хранения данных, поэтому для каждой записи у меня есть уникальный идентификатор.Я хочу использовать этот уникальный идентификатор для создания хеш-строки (для достижения уникальности полученной хеш-строки).

Мне нужна эта хеш-строка, состоящая только из допустимых символов (0-9 аз. AZ).

Какую хеш-функцию я должен использовать для достижения этой цели?Как я могу сгенерировать такие строки хеша?

Добавлено позже: я хочу сгенерировать эту строку и передать ее пользователю, чтобы он мог вернуться позже, чтобы отредактировать запись.любая другая идея приемлема.

Ответы [ 3 ]

2 голосов
/ 05 июля 2010

Использовать crypt:

$hash = crypt("somevaluetohash", $uniqueid);

Уникальный идентификатор представляет собой соль, поэтому вы можете генерировать различные значения в зависимости от идентификатора.Таким образом, если бы у одного пользователя был пароль «somevaluetohash», а у другого - тот же, конечный хэш не был бы тем же.

0 голосов
/ 05 июля 2010

Действительно ли это должна быть криптографическая контрольная сумма? Или более простая контрольная сумма подходит? Не подходит ли сам первичный ключ, предоставленный базой данных?

У вас есть много вариантов, от самых простых crc32 до самых продвинутых sha512 .

Но если вы делаете это для какого-то конкретного приложения (например, хеширование файловой системы или поиск близлежащих объектов с использованием некоторых метрик), то вам придется указать больше вашей проблемы.

0 голосов
/ 05 июля 2010
<?php
  $id;
  $hash_full = md5($id); //hash('sha256', $id);
  $hash_cropped = substr($hash_full, 0, 6);
?>

Используйте hash () для других алгоритмов хеширования.

Но для чего вам нужны эти хэши?Для меня не имеет смысла генерировать хеш из идентификатора, не могли бы вы вместо этого просто использовать идентификатор?

...