Коли я спочатку писав цю відповідь, я вважав, що питання стосується "офлайн" перевірки ліцензійних ключів. Більшість інших відповідей стосуються перевірки в Інтернеті, що значно простіше в обробці (більшу частину логіки можна виконати на стороні сервера).
Під час перевірки в режимі офлайн найскладніше - це гарантувати можливість генерування величезної кількості унікальних ліцензійних ключів, а також зберігати надійний алгоритм, який не може бути легко порушений (наприклад, проста контрольна цифра)
Я не дуже добре розбираюся в математиці, але мені вразило, що один із способів зробити це - використовувати математичну функцію, яка побудує графік
Нанесена лінія може мати (якщо ви використовуєте досить тонку частоту) тисячі унікальних точок, тож ви можете генерувати ключі, вибираючи випадкові точки на цьому графіку та певним чином кодуючи значення.
Як приклад, ми побудуємо цей графік, виберемо чотири точки і кодуємо в рядок як "0, -500; 100, -300; 200, -100; 100,600"
Ми зашифруємо рядок відомим і фіксованим ключем (жахливо слабкий, але він служить цілі), потім перетворимо отримані байти через Base32, щоб генерувати остаточний ключ
Потім програма може змінити цей процес (base32 на реальне число, розшифрувати, розшифрувати точки), а потім перевірити, що кожна з цих точок є на нашому секретному графіку.
Це досить невелика кількість коду, який дозволив би створити величезну кількість унікальних та дійсних ключів
Однак це дуже багато безпеки через незрозумілість. Кожен, хто потребує часу для розбирання коду, зможе знайти графічну функцію та ключі шифрування, а потім знущається над генератором ключів, але це, мабуть, досить корисно для уповільнення випадкового піратства.