Несколько месяцев назад мне было поручено внедрить уникальный и случайный код для нашего веб-приложения. Код должен быть удобным для пользователя и как можно меньше, но по-прежнему быть практически случайным (поэтому пользователи не могли легко предсказать следующий код в последовательности).Как я могу создать уникальный, маленький, случайный и удобный ключ?
Это в конечном итоге генерации значений, которые выглядели примерно так:
Af3nT5Xf2
К сожалению, я никогда не был удовлетворен реализацией. Руководство не могло быть и речи, они были просто слишком большими и трудными для пользователей. Я надеялся на что-то большее по строкам из 4 или 5 символов/цифр, но наша конкретная реализация создавала бы заметные последовательности с рисунком, если мы закодировали до менее 9 символов.
Вот что мы в конечном итоге делает:
Мы тянули уникальный последовательный 32-битный идентификатор из базы данных. Затем мы вставили его в центральные биты 64-битного числа RANDOM. Мы создали таблицу поиска легко типизированных и распознанных символов (A-Z, a-z, 2-9, пропускающих легко запутанные символы, такие как L, l, 1, O, 0 и т. Д.). Наконец, мы использовали эту таблицу поиска для base-54 для кодирования 64-разрядного целого числа. Высокие биты были случайными, младшие разряды были случайными, но центральные биты были последовательными.
Конечным результатом был код, который был намного меньше, чем ориентир, и выглядел случайным, хотя его абсолютно не было.
Я не был доволен этой конкретной реализацией. Что бы вы, ребята, сделали?
Зачем вам последовательное значение? Вы вернулись к нему? Если да, используйте криптографическую функцию для шифрования вашего секретного номера с помощью секретного ключа и кодирования шифрования с помощью алфавита по вашему выбору. – Oli 2008-10-03 11:42:00