Задать вопрос

Как сгенеририровать строку по id?

Здравствуйте! Подскажите пожалуйста. Есть пользователь с закрепленным за ним id (например, 10 цифр). Надо получить уникальную строку из букв и цифр большей длинны (около 200). Надо что бы в любой момент эту строку можно было получить зная только id юзера, не прибегая к БД.

Думал в сторону хеш-функций, что бы получить уникальное число, а вот что с ним дальше делать не пойму.
  • Вопрос задан
  • 2446 просмотров
Подписаться 2 Оценить 1 комментарий
Решения вопроса 2
RicoX
@RicoX
Ушел на http://ru.stackoverflow.com/
Да хоть так:
echo "0123456789"+"salt1" | shasum -a 512256 | awk '{print $1"salt2"}'

или любая другая логика с хешами, зная соли и начальный ID всегда можно восстановить эту строку.
Ответ написан
@throughtheether
human after all
Есть пользователь с закрепленным за ним id (например, 10 цифр). Надо получить уникальную строку из букв и цифр большей длинны (около 200). Надо что бы в любой момент эту строку можно было получить зная только id юзера, не прибегая к БД.

Наивный (но имеющий место, на мой взгляд) подход таков. Вычисляете 2-3-4 различных хэш-суммы (md5, sha-1, и т.д.) от id + произвольная соль (которую храните глобально). Полученные 'hexdump', т.е. представления хэшей в шестнадцатеричном формате конкатенируете. Результат кодируете в base64. Для достижения необходимой длины может понадобиться: 1) конкатенация хэша с самим собой несколько раз, до кодирования 2) конкатенация результата base64-кодирования с самим собой несколько раз.

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

Войдите, чтобы написать ответ

Похожие вопросы