Уникальные идентификаторы, которые удобны для пользователя и трудно угадать - PullRequest
2 голосов
/ 14 сентября 2009

Моя команда работает над приложением с устаревшей базой данных, которое использует два разных значения в качестве уникальных идентификаторов для объекта группы: Id - это автоматически увеличивающийся столбец идентификаторов, значение которого определяется базой данных при вставке. GroupCode определяется приложением после вставки и составляет "Group" + theGroup.Id.

Нам нужен алгоритм для генерации GroupCode, который:

  1. Уникальны.
  2. Для пользователя достаточно просто набрать правильно.
  3. Хакеру сложно угадать.
  4. Либо создаются базой данных при вставке, либо создаются приложением до вставки (т. Е. Не зависят от столбца идентификаторов).

Существующее решение соответствует первым двум критериям, но не последним двум. Кто-нибудь знает хорошее решение, отвечающее всем вышеперечисленным критериям?

Еще одно примечание: несмотря на то, что этот код используется пользователями извне, и хотя идентификатор мог бы стать лучшим идентификатором для других таблиц для связи их внешних ключей, GroupCode используется другими таблицами для ссылки на определенную группу.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 15 сентября 2009

Можно ли добавить новый столбец? Он может состоять из идентификатора и случайного 32-разрядного числа.

Это 64-битное число можно затем преобразовать в «Памятную случайную строку». Это не было бы идеально в плане безопасности, но могло бы быть достаточно хорошим.

Вот пример использования Ruby и Koremutake gem .

require 'koremu'
# http://pastie.org/96316 adds Array.chunk
identity=104711
r=rand(2**32)<<32 # in this example 5946631977955229696
ka = KoremuFixnum.new(r+identity).to_ka.chunk(3)
ka.each {|arr| print KoremuArray.new(arr).to_ks + " "}

Результат:

TUSADA REGRUMI LEBADE

Также ознакомьтесь с Алгоритмы генерации фонетически запоминаемого пароля .

1 голос
/ 14 сентября 2009

Вы изучили кодировку содержимого Base32 / Base36? Представление Base32 столбца Identity seed сделает его уникальным, простым в вводе, но определенно небезопасным. Однако большинство непрограммистов не будут знать, как генерируется строковое значение.

Также с помощью Base32 / 36 вы можете поддерживать обычные первичные ключи базы данных на основе целых чисел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...