Autor |
Beitrag |
Apo95
      
Beiträge: 129
Win2000, WinXP, WinServer 2003 Standard x86, Win7x64
Delphi 6 Enterprise, D2009 Architect, RAD Studio XE6 Architect
|
Verfasst: Mi 25.12.13 01:43
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 :
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 1: if (pmUpper in Mode) then begin S := S + cUpper[1+RANDOM(Length(cUpper))]; Inc(i); end; 2: if (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
_________________ Lette-Verein MIA
|
|
ub60
      
Beiträge: 764
Erhaltene Danke: 127
|
Verfasst: Sa 28.12.13 17:59
Prinzipiell hast Du alle Teile, die Du benötigst, aber es sind noch eine Reihe Denkfehler dabei:
- Was wird zurückgegeben, wenn eine leere Eingabe im Set erfolgt?
- Warum werden bei Random(4) nur die Werte 1 und 2 behandelt?
- Wie kann man bis 5 zählen
?
So sollte es funktionieren:
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)=0) and (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
Für diesen Beitrag haben gedankt: Apo95
|
|
Apo95 
      
Beiträge: 129
Win2000, WinXP, WinServer 2003 Standard x86, Win7x64
Delphi 6 Enterprise, D2009 Architect, RAD Studio XE6 Architect
|
Verfasst: Sa 28.12.13 23: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 ?
_________________ Lette-Verein MIA
|
|
Apo95 
      
Beiträge: 129
Win2000, WinXP, WinServer 2003 Standard x86, Win7x64
Delphi 6 Enterprise, D2009 Architect, RAD Studio XE6 Architect
|
Verfasst: So 29.12.13 02: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.
_________________ Lette-Verein MIA
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 29.12.13 10:55
Apo95 hat folgendes geschrieben : | 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
      
Beiträge: 486
Erhaltene Danke: 99
Win7, Win81, Win10
Tokyo, VS2017
|
Verfasst: So 29.12.13 13: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.
_________________ Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
|
|
|