Autor Beitrag
Apo95
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 129

Win2000, WinXP, WinServer 2003 Standard x86, Win7x64
Delphi 6 Enterprise, D2009 Architect, RAD Studio XE6 Architect
BeitragVerfasst: 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 :

ausblenden volle Höhe 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

_________________
Lette-Verein MIA
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 764
Erhaltene Danke: 127



BeitragVerfasst: 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 :lol: ?

So sollte es funktionieren:

ausblenden volle Höhe 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

Für diesen Beitrag haben gedankt: Apo95
Apo95 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 129

Win2000, WinXP, WinServer 2003 Standard x86, Win7x64
Delphi 6 Enterprise, D2009 Architect, RAD Studio XE6 Architect
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 129

Win2000, WinXP, WinServer 2003 Standard x86, Win7x64
Delphi 6 Enterprise, D2009 Architect, RAD Studio XE6 Architect
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 29.12.13 10: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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: 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.