Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - lizenzkey erzeugen


Apo95 - Mi 25.12.13 00:43
Titel: lizenzkey erzeugen
Hi,

was ich suche, steht zwar schon oben ^^, aber ich bräuchte trotzdem noch Infos; und zwar möchte ich so viele Keys erzeugen lassen, wie in einem Textfeld steht. Gedacht habe ich mir das so :


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
type
TPasswordMode = set of (pmUpper, pmNumbers);


function GeneratePassword(ALength: Integer; Mode: TPasswordMode):string;
const
  cUpper   = 'BCDEFGHIJKLMNOPQRSTUVWXY';
  cNumbers = '123456789';
  
var
  i : Integer;
  S : string;
  iM: BYTE;
begin

  if Mode = [] then Exit;

  i := 0;
  Randomize;
  
  while (i < ALength)  do
  begin
    iM := RANDOM(4);
    case iM of
      // Grossbuchstaben
     1if (pmUpper in Mode) then begin
           S := S + cUpper[1+RANDOM(Length(cUpper))];
          Inc(i);
         end;        
      // Nummern
      2if (pmNumbers in Mode) then begin
           S := S + cNumbers[1+RANDOM(Length(cNumbers))];
           Inc(i);
          end;
    end;
  end;
  Result := S;
end;


Was fehlt noch, damit ich den KeyGen verwenden kann? Ferner soll jeder Block aus 5 Zeichen mit einem Bindestrich getrennt werden.

Gruß,

Apo95


ub60 - Sa 28.12.13 16:59

Prinzipiell hast Du alle Teile, die Du benötigst, aber es sind noch eine Reihe Denkfehler dabei:

So sollte es funktionieren:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
type
  TPasswordMode = set of (pmUpper, pmNumbers);

function GeneratePassword(ALength: Integer; Mode: TPasswordMode):string;
const
  cUpper   : String = 'ABCDEFGHIJKLMNPQRSTUVWXYZ';
  cNumbers : String = '123456789';
var
  i, iM: Integer;
  cSelect, S : string;
begin
  if Mode = [] then
    begin
      Result:='ungültige Auswahl';
      Exit;
    end;
  Randomize;
  cSelect:='';
  if (pmUpper in Mode) then
    cSelect:=cSelect+cUpper;
  if (pmNumbers in Mode) then
    cSelect:=cSelect+cNumbers;
  s:='';
  for i:=1 to ALength do
    begin
      iM := Random(Length(cSelect))+1;
      s:=s+cSelect[iM];
      if ((i mod 5)=0and (i<ALength) then s:=s+'-';
    end;
  Result:=s;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GeneratePassword(10, []));
  ShowMessage(GeneratePassword(10, [pmUpper]));
  ShowMessage(GeneratePassword(15, [pmNumbers]));
  ShowMessage(GeneratePassword(20, [pmUpper, pmNumbers]));
end;

ub60


Apo95 - Sa 28.12.13 22:16

Aha... ;-) schau schau... danke vielmals für den Tipp! Um die Anzahl der im Edit Feld stehenden Key zu erzeugen, reicht es doch aus, die Methode aufzurufen, oder ?


Apo95 - So 29.12.13 01:12

Achso , nur zur Info:

Der Key darf kein A,Y und 0 enthalten; das Programm soll überprüfen, ob der eingegebene Key zu dem Algorithmus paßt oder fehlerhaft ist.


jaenicke - So 29.12.13 09:55

user profile iconApo95 hat folgendes geschrieben Zum zitierten Posting springen:
Der Key darf kein A,Y und 0 enthalten; das Programm soll überprüfen, ob der eingegebene Key zu dem Algorithmus paßt oder fehlerhaft ist.
Zu welchem Algorithmus? Wenn du rein zufällig einen Key erzeugst, kannst du auch nix prüfen...

// EDIT:
Und wenn du nur ein paar Buchstaben verbietest, ist sehr schnell ein passender Key ausprobiert...
Du solltest dir da schon mehr Gedanken machen oder eine kommerzielle Lösung benutzen. Oder besser ohne Seriennummern arbeiten (eine Vollversion, eine eingeschränkte, fertig), denn ein so geringer Schutz nervt nur die Käufer, ist aber sehr leicht geknackt, so dass er Raubkopien nicht verhindert.

Davon abgesehen frage ich mich wie du ein schützenswertes Programm geschrieben haben willst, wenn du mit so einfachen Dingen überfordert bist...


OlafSt - So 29.12.13 12:36

Habe ich mich auch schon gefragt... Letzlich ist es ja faktisch unmöglich, einen so generierten Key auf seine Gültigkeit zu prüfen. Natürlich ginge das mit einem Lizenzkey-Server, bei dem die Keys alle hinterlegt sind und das Programm dann Online verifiziert. Aber dann hat das Programm plötzlich einen Online-Zwang und ob das so gut ankommt...

Manchmal ist es einfacher, einfach nur eine Demo-Version zu spreaden und wenn jemand eine Lizenz erwerben will, bekommt er eine Non-Demo-
Version zugemailt, die man dann einfach an die Harddisk-ID oder sowas bindet.