Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 2

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

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

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

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

Ответ 3

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

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

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

Ответ 4

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

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

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

Ответ 5

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

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

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

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

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