Алгоритм генерации уникального CD-KEY с валидацией - PullRequest
5 голосов
/ 21 мая 2009

Я пытаюсь создать уникальный CD-KEY, чтобы вставить его в коробку с нашим продуктом, точно так же, как обычный CD-KEY, находящийся в стандартных коробках программного обеспечения, которые пользователи используют для регистрации продукта.

Однако мы не продаем программное обеспечение, мы продаем набор для сбора ДНК для криминальных и медицинских целей. Пользователи получат по почте комплект для сбора слюны с CD-KEY, и они будут использовать этот CD-KEY, чтобы создать учетную запись на нашем веб-сайте и получить свои результаты. Результаты теста будут связаны с CD-KEY. Это единственный способ связать результаты с пациентами. Поэтому важно, чтобы он не провалился:)

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

Например, это не может быть последовательная последовательность чисел, например,
00001
00002
00003
...
Причина в том, что если кто-то получит комплект 00002, но зарегистрирует его как 000003 случайно, его результаты будут сопоставлены с кем-то еще. Так что это должно быть похоже на номера кредитных карт ... Если не введена правильная последовательность, ваши шансы случайного попадания в действительное число равны 1 на миллион ...

Кроме того, мы ежегодно продаем более 50 000 комплектов различным поставщикам (которые будут генерировать свои собственные CD-KEYS с использованием нашего алгоритма), поэтому мы не можем поддерживать список всех ранее выпущенных CD-KEYS для проверки на дубликат. Алгоритм должен генерировать уникальные CD-ключи.

Нам также требуется возможность проверки правильности CD-KEY с помощью алгоритма быстрой проверки, чтобы мы могли информировать пользователя о том, что введенный им код является недействительным. Это оставляет много алгоритмов хеширования или MD5, я верю. И это не может быть 128 бит, потому что, кто бы потратил это время, чтобы напечатать его на экране компьютера?

До сих пор я думал, что окончательная структура CD-KEY будет выглядеть

(Код продукта из 4 символов) - (код посредника из 4 символов) - (уникальный ключ для проверки на 12 символов, проверяемый CD-ключ)

Ex. 384A - GTLD - {4565 - FR54 - EDF3}


Чтобы обеспечить уникальность KEYS, я мог бы включить текущую дату (20090521) в качестве части источника. Мы не будем генерировать уникальные ключи чаще, чем раз в неделю, поэтому это значение меняется достаточно часто с целью получения уникального начального значения.

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

Ответы [ 5 ]

6 голосов
/ 21 мая 2009

Создайте строки <providername>000001, <providername>000002 и т. Д. Или что-либо еще и зашифруйте их с помощью открытого ключа, и это ваш "CD-KEY", который вводит пользователь. Расшифруйте CD-KEY с помощью закрытого ключа и подтвердите, что при расшифровке вы получите правильную строку с допустимым именем поставщика.

1 голос
/ 04 февраля 2011

Я наконец-то остановился на CD-ключе этой формы

<TIMESTAMP>-<incremented number>-<8 char MD5 hash>-<checksumdigit>

Я использовал алгоритм цифр контрольной суммы ISBN мод 11.

1 голос
/ 21 мая 2009

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

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

1 голос
/ 21 мая 2009

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

0 голосов
/ 21 мая 2009

Генерация GUID и добавление к нему случайного числа. GUID гарантированно будет уникальным, а случайное число сделает невозможным случайное попадание в код. Просто не изменяйте GUID, иначе вы можете поставить под угрозу уникальность.

http://msdn.microsoft.com/en-us/library/aa475087.aspx

...