Из любопытства:Как генерируются серийные номера?Подсказки, Алгоритмы?[закрыто]

StackOverflow https://stackoverflow.com/questions/715251

Вопрос

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

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

Любые подсказки, опыт или написанные алгоритмы приветствуются.

Это было полезно?

Решение

Брэндон Стэггс написал хорошую статью о Внедрение системы Частичной проверки серийного номера.Примеры написаны на Delphi, но могут быть преобразованы на другие языки.

Другие советы

Заведи себе пара открытых / закрытых ключей.Генерировать порядковые номера (10000, 20000, 30000, 40000, ....) которые имеют некоторую идентифицирующую характеристику (например, кратную 10000).Зашифруйте этот номер, используя свой закрытый ключ.Закодируйте это значение, используя какую-нибудь удобочитаемую систему (основание 32 или 64) и разделите значения на группы, чтобы людям было легче их анализировать.Распространяйте закодированный серийный номер при каждой продаже вашего приложения.

Где-то в приложении у вас спрятан открытый ключ.Когда пользователь вводит закодированный серийный номер, сначала расшифруйте его обратно в двоичный код.Используйте открытый ключ для его расшифровки.Убедитесь, что оно делится на 10000.

Самое сложное заключается в реализации - скрытии открытого ключа в приложении, чтобы его нельзя было легко заменить.Выберите некоторую последовательность, которую вы можете легко идентифицировать, но у которой не закончатся значения. Запутывающий приложение для того, чтобы кто-то не мог легко пропустить всю проверку целиком.и т.д...

Ну, традиционно серийные номера являются серийными ...цифры.Итак, первый пример с производственной линии имеет sn 0001, затем следующий - 0002, а следующий - 0003.Я думаю, что большинство людей могут разработать этот алгоритм.

Я думаю, что вы на самом деле спрашиваете о ключах продукта, которые используют механизм, аналогичный подписыванию сообщений открытым ключом - ключ продукта - это зашифрованное значение, у программы есть открытый ключ, который позволяет ей проверять, что ключ действителен, но только у поставщика программного обеспечения есть секретный ключ для "подписи" ключа продукта.Статья в Википедии о цифровые подписи имеет общий механизм;единственное условие заключается в том, что для ввода ключа пользователем он должен быть немного короче, чем ключ PGP.

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

Если у вас есть 5 блоков по 5 символов, у вас есть комбинации 36 ^ 25, что больше, чем 2 ^ 128, поэтому вы можете использовать один из стандартных алгоритмов цифровой подписи, который генерирует 128 бит, а затем преобразовать это значение в базовое 36.

GUID ("Глобально уникальный идентификатор") мог бы быть простым способом решить эту проблему:

http://en.wikipedia.org/wiki/Globally_Unique_Identifier

Идентификаторы Guid содержат 16 байт и чаще всего записываются в виде текста в виде последовательности шестнадцатеричных цифр, таких как:

3F2504E0-4F89-11D3-9A0C-0305E82C3301

И большинство языков программирования должны иметь возможность генерировать GUID с помощью одной из доступных библиотек.

Вы можете использовать генератор случайных чисел и сохранить выходные данные в базе данных.В случае запроса на активацию вы просто проверяете, есть ли серийный номер в базе данных, и помечаете серийный номер как "используемый".

Конечно, для этого требуется подключение к Интернету, но это хорошо против метода "купи один раз, используй много-много раз", и в случае обращения в службу поддержки вы можете повторно активировать этот серийный номер для другой переустановки.

Последующее редактирование:Вы также должны использовать для проверки доступа в Интернет зашифрованное и аутентифицированное соединение, например HTTPS.

Используя мой Google-Foo, я придумал эту статью:

http://www.mactech.com/articles/mactech/Vol.13/13.02/SerialNumberGenerator/index.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top