Als ich diese Antwort ursprünglich schrieb, wurde davon ausgegangen, dass es sich um eine Offline-Validierung von Lizenzschlüsseln handelte. Die meisten anderen Antworten beziehen sich auf die Online-Überprüfung, die wesentlich einfacher zu handhaben ist (der größte Teil der Logik kann serverseitig erfolgen).
Bei der Offline-Überprüfung ist es am schwierigsten sicherzustellen, dass Sie eine große Anzahl eindeutiger Lizenzschlüssel generieren und dennoch einen starken Algorithmus beibehalten können, der nicht leicht kompromittiert werden kann (z. B. eine einfache Prüfziffer).
Ich bin nicht sehr gut mit Mathematik vertraut, aber es ist mir aufgefallen, dass eine Möglichkeit, dies zu tun, darin besteht, eine mathematische Funktion zu verwenden , die einen Graphen darstellt
Die gezeichnete Linie kann (wenn Sie eine ausreichend feine Frequenz verwenden) Tausende eindeutiger Punkte haben, sodass Sie Schlüssel generieren können, indem Sie zufällige Punkte in diesem Diagramm auswählen und die Werte auf irgendeine Weise codieren
Als Beispiel zeichnen wir dieses Diagramm, wählen vier Punkte aus und codieren in eine Zeichenfolge als "0, -500; 100, -300; 200, -100; 100.600".
Wir verschlüsseln die Zeichenfolge mit einem bekannten und festen Schlüssel (schrecklich schwach, aber er erfüllt einen Zweck) und konvertieren dann die resultierenden Bytes über Base32 , um den endgültigen Schlüssel zu generieren
Die Anwendung kann diesen Vorgang dann umkehren (base32 auf reelle Zahl umstellen, entschlüsseln, die Punkte entschlüsseln) und dann überprüfen, ob sich jeder dieser Punkte in unserem geheimen Diagramm befindet.
Es ist eine relativ kleine Menge an Code, mit der eine große Anzahl eindeutiger und gültiger Schlüssel generiert werden kann
Es ist jedoch sehr viel Sicherheit durch Dunkelheit. Jeder, der sich die Zeit nimmt, um den Code zu zerlegen, kann die Grafikfunktion und die Verschlüsselungsschlüssel finden und dann einen Schlüsselgenerator nachahmen, aber dies ist wahrscheinlich sehr nützlich, um die gelegentliche Piraterie zu verlangsamen.