Stel dat je een fantastische applicatie hebt gemaakt nadat je het boek ‘Starten met programmeren in .NET voor AutoCAD‘ uit je hoofd hebt geleerd. Geef je het dan weg? Ga je het verkopen? En als je het verkoopt, hoe zorg je ervoor dat je niet slechts één verkoopt die vervolgens door iedereen wordt gekopieerd? Het wordt dan tijd voor een licentiesysteem.

Disclaimer

Het licentiesysteem dat hier beschreven wordt, moet je natuurlijk niet één-op-één overnemen. Het is een concept waarmee je aan de slag kunt om zelf uit te breiden en aan te passen. Verkoop je veel eigen gemaakte programma’s, ga dan investeren in een goed systeem dat door iemand anders is gemaakt, die zijn er meestal veel beter in.

Wat heb je nodig

Voor een licentiesysteem zijn er twee dingen nodig: een key-maker en een key-checker. De key-maker houd je natuurlijk voor jezelf, om keys aan te maken voor de gebruikers. Het zou zelfs in Excel kunnen, waar op basis van enkele ingevoerde waarden een key gegenereerd kan worden die je naar de gebruiker stuurt.

In de applicatie bij de gebruiker wordt de key gecontroleerd. Je hebt in ieder geval een mogelijkheid nodig om een key in te voeren die dan ergens wordt opgeslagen (Registry of een tekstbestand ergens op de schijf) en een functie die checkt of de ingevoerde code correct is. Zo niet, dan stopt de applicatie.

Concept

Een key moet normaliter werken tot een bepaalde datum en alleen op het systeem van de gebruiker. De key moet dus zijn opgebouwd uit een aanduiding hoelang de applicatie nog mag werken en een kenmerk van de gebruiker of zijn computer. Dus in de meest simpele vorm kan een key er zo uitzien:

20231231-jantje

De applicatie ziet nu dat het nog mag blijven werken tot 31-12-2023 als de gebruikersnaam van de computer ‘jantje’ is. Er is helaas geen enkele manier om te voorkomen dat de gebruiker de datum aanpast, en op een andere computer gebruikt door daar de gebruikersnaam in te vullen.

Om even op het tijdselement te focussen, in plaats van een harde datum kun je ook een code gebruiken die het aantal dagen vanaf een bepaald moment berekent.

(new DateTime(2023,12,31)).Subtract(new DateTime(2000,1,1)).Days;

Bovenstaande code resulteert in het getal 8765 (dat is het aantal dagen tussen 1 januari 2000 en 31 december 2023). Om dit getal in de applicatie te checken, hoeft deze waarde alleen maar vergeleken te worden met de waarde uit:

DateTime.Now.Subtract(new DateTime(2000,1,1)).Days;

Dit geeft het aantal dagen tot aan vandaag terug. Als deze waarde kleiner is dan 8765 dan mag de applicatie nog werken, als het groter is dan is de licentiegeldigheid verstreken. Als extraatje kun je in de codecheck opnemen dat als het verschil minder is dan bijvoorbeeld 14 dagen, dat een waarschuwing op het scherm wordt getoond zodat de gebruiker een nieuwe licentie gaat kopen.

Het getal is al wat minder herkenbaar maar evengoed kan een gebruiker nog steeds aanpassingen doen aan dit getal om te zien of de licentie blijft werken. Daarom kun je het beste maskeren wat je wilt doorgeven, de gebruiker moet niet een getal zien maar een onherkenbare brei van letters en cijfers. Bijvoorbeeld dit:

8yf1d-7sb2w-6ju3x-5sc4z

Maar wat is dit en wat stelt het voor? Nou, dit is het geheim:

8yf1d-7sb2w-6ju3x-5sc4z

Het eerste rode getal van elk blokje vormt samen het getal dat je nodig hebt, namelijk 8765. Elk groen getal op de vierde positie van elk blokje is een controlegetal, samen met het rode getal moeten ze in elk blokje opgeteld op 9 uitkomen (8+1, 7+2, enz). Als een gebruiker dan rommelt aan de getallen, dan is de kans klein dat het toevallig weer samen 9 wordt. De rest van de blokjes wordt opgevuld met random karakters (of nog beter, ook een soort van scramble van de gebruikersnaam zodat deze code echt alleen maar op die computer werkt).

Verbeteringen

Uiteraard zijn hier nog veel verbeteringen te maken om het systeem nog sterker te maken. Je kunt bijvoorbeeld de positie laten variëren van de getallen zodat ze niet altijd op positie 1 en 4 staan. Of zorg ervoor dat één van de karakters binnen het blokje overeenkomsten heeft het het controlegetal (1=z, 2=y, 3=x, enz). En zo kun je nog wel meer bedenken.

Alles met het doel om:

  1. De licentie te laten werken tot een bepaalde datum
  2. Alleen de gebruiker toe te staan die de licentie gekocht heeft
  3. Zodanig afgeschermd dat bij elke wijziging van de key zorgt voor het niet-geldig zijn