Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   was wie ein keygen erstellen (https://www.delphipraxis.net/77529-wie-ein-keygen-erstellen.html)

wellilein 21. Sep 2006 19:54

Re: was wie ein keygen erstellen
 
Warum wollt ihr ihm denn immer andere Lösungen aufdrängen?

Hier ist gültiger C# Code, der genau das macht was er will.
Zum Laufen lassen braucht man eine Form, einen Button und eine Textbox.
Delphi-Quellcode:
        private void button1_Click(object sender, EventArgs e)
        {
            // Initialisieren
            string[][] nummern = new string[4][];
            nummern[0] = new string[] { "2345", "3456", "4567", "5678" };
            nummern[1] = new string[] { "8568", "7933", "2473", "3839" };
            nummern[2] = new string[] { "5648", "2214", "3839", "2847" };
            nummern[3] = new string[] { "3738", "6454", "3949", "8394" };

            string serial = "";
            Random generator = new Random();

            // Generieren
            for (int i = 0; i < nummern.Length; i++)
            {
                int r = generator.Next(nummern[i].Length);
                serial += nummern[i][r];
                if (i != nummern.Length - 1)
                {
                    serial += "-";
                }
            }

            // Ausgeben
            textBox1.Text = serial;
        }
Noch ein Button und noch eine Textbox, um die Seriennummer auch wieder zu überprüfen:
Delphi-Quellcode:
        private void button2_Click(object sender, EventArgs e)
        {
            // Einlesen
            string serial = textBox1.Text;

            // Initialisieren
            string[][] nummern = new string[4][];
            nummern[0] = new string[] { "2345", "3456", "4567", "5678" };
            nummern[1] = new string[] { "8568", "7933", "2473", "3839" };
            nummern[2] = new string[] { "5648", "2214", "3839", "2847" };
            nummern[3] = new string[] { "3738", "6454", "3949", "8394" };
           
            // Überprüfen
            bool correct = true;
            string[] parts = serial.Split(new char[] { '-' });
            for (int i = 0; i < parts.Length; i++)
            {
                bool partFound = false;
                for (int j = 0; j < nummern[i].Length; j++)
                {
                    if (nummern[i][j] == parts[i])
                    {
                        partFound = true;
                    }
                }

                correct &= partFound;
            }

            // Ausgeben
            if (correct)
            {
                textBox2.Text = "Die Seriennummer ist ok";
            }
            else
            {
                textBox2.Text = "Die Seriennummer ist falsch";
            }
        }
Ich habe mir erlaubt, das in C# zu schreiben. Immerhin gibt es C# ja auch von Borland :-)
Ich hab das mal absichtlich in zwei völlig unabhängige Funktionen gepackt. Immerhin soll das später jamal in zwei unterschiedlichen Programmen laufen.

Gruß, Thomas

leddl 21. Sep 2006 19:59

Re: was wie ein keygen erstellen
 
Zitat:

Zitat von wellilein
Warum wollt ihr ihm denn immer andere Lösungen aufdrängen?

:roll: Hier will ihm keiner immer andere Lösungen aufdrängen :roll: Es wird ihm nur auf seine Fragen geantwortet... Du bist derjenige, der ihm hier eine vollständige (und dazu noch IMHO wenig hilfreiche) Lösung anbietet.
Zitat:

Zitat von wellilein
Hier ist gültiger C# Code, der genau das macht was er will.
[...]
Ich habe mir erlaubt, das in C# zu schreiben. Immerhin gibt es C# ja auch von Borland :-)

Und du glaubst, daß ihm das was bringt? :roll: Zum einen unterscheidet sich C# sowohl in Syntax als auch in diesem Fall von der Herangehensweise signifikant. Und er bekommt es bisher ja noch nicht einmal in Delphi gebacken. Zumal dein Code auch noch keineswegs "genau das macht, was er will" :zwinker:

Hier geht es nicht darum, aller Welt zu zeigen, wie schnell und toll man etwas zustandebringt, sondern darum, jemandem bei einem Problem zu helfen... :roll:

Neutral General 21. Sep 2006 20:06

Re: was wie ein keygen erstellen
 
Delphi-Quellcode:
// Generiert einen CD-KEY
function CreateKey : String;
var qs : Integer;
    r : Integer;
    s : String;
begin
repeat
qs := 0;
s := '';
repeat
  r := random(25)+65;
  s := s+ Chr(r);
  qs := qs + r;
  if qs + 65 > 975 then begin
   qs := qs - r;
   delete(s,length(s),1);
   s := s + chr(975-qs);
   qs := qs + (975-qs);
  end;
until qs = 975;
until (Ord(s[Length(s)]) <= 90) and (Ord(s[Length(s)]) >= 65);
Result := s;
end;

// Zum überprüfen ob ein CD-KEY OK ist
function IsRight(S : String) : Boolean;
var i, qs: integer;
begin
  qs := 0;
  for i := 1 to length(s) do begin
   qs := qs+ord(s[i]);
  end;
  if qs = 975 then Result := true
  else Result := false;
end;
Die erste Funktion generiert einen CD-KEY, mit der zweiten kannst du sie überprüfen.. Richtlinie war bei mir das die Quersumme der Ord(Chars) = 975 sein muss. Das ist sicher nicht so professionell aber es klappt ;)

Gruß
Neutral General

panzerfischer 21. Sep 2006 20:21

Re: was wie ein keygen erstellen
 
meine version:

Delphi-Quellcode:
function ran(range:integer):integer;
begin
randomize;
result:=trunc(random(range))
end;

function zahl:string;
var v1,v2,v3,v4,v5:string;
begin
v1:=IntToStr((Ran(8)+1)*10000+Ran(9)*1000+Ran(9)*100+Ran(9)*10+ran(9));
v2:=IntToStr((Ran(8)+1)*10000+Ran(9)*1000+Ran(9)*100+Ran(9)*10+ran(9));
v3:=IntToStr((Ran(8)+1)*10000+Ran(9)*1000+Ran(9)*100+Ran(9)*10+ran(9));
v4:=IntToStr((Ran(8)+1)*10000+Ran(9)*1000+Ran(9)*100+Ran(9)*10+ran(9));
v5:=IntToStr((Ran(8)+1)*10000+Ran(9)*1000+Ran(9)*100+Ran(9)*10+ran(9));

result:=v1+'-'+v2+'-'+v3+'-'+v4+'-'+v5;

end;
das ist wie gesagt, nur die generierung.

die anschließende überprüfung willst du gar nicht sehen, die ist krank (warum einfach, wenn's auch kompliziert geht) aber meiner meinung nach nicht so leicht zu knacken, ein beispiel:

13452-32743-47463-57395-73984 ist die generierung
11598-31729-10767-18434-27217 ist die dazugehörige lösung

wellilein 21. Sep 2006 20:26

Re: was wie ein keygen erstellen
 
Zitat:

Zitat von leddl
... ihm hier eine vollständige (und dazu noch IMHO wenig hilfreiche) Lösung anbietet.

Vollständig war meine Absicht, aber warum wenig hilfreich :?:

Zitat:

Zitat von leddl
Und du glaubst, daß ihm das was bringt? :roll: Zum einen unterscheidet sich C# sowohl in Syntax als auch in diesem Fall von der Herangehensweise signifikant. Und er bekommt es bisher ja noch nicht einmal in Delphi gebacken.

Indem ich die Lösung in C# vorgebe muss er es selbst nach Delphi umsetzen.
Zudem hat er ja noch gar nicht gesagt, in welcher Sprache er das ganze umsetzen will. Vielleicht Delphi.NET?

An der fehlenden OO von Delphi kann es auch nicht liegen. Mit OO hat das ganze nichts zu tun. Das hier ist funktionale Programmierung und das hab ich bei meinem C# bereits berücksichtigt.
Zitat:

Zitat von leddl
Zumal dein Code auch noch keineswegs "genau das macht, was er will" :zwinker:

Jedenfalls hat er nichts davon erwähnt, dass er einen CD Key mit der Quersumme 967 möchte, sondern mit einer vorgegebenen Anzahl an vierstelligen Nummern, die er sogar noch aufgelistet hat. Und mich ärgerts ein bisschen, dass niemand darauf eingeht.
Zitat:

Zitat von leddl
Hier geht es nicht darum, aller Welt zu zeigen, wie schnell und toll man etwas zustandebringt, sondern darum, jemandem bei einem Problem zu helfen... :roll:

Ich sehe schon, wir unterscheiden uns hier von www.experts-exchange.com :?
Nun, ich will zusehen, dass ich zukünftig auf die Lösung hinleite und keinen Code vorgebe.

:hi: , Thomas

leddl 21. Sep 2006 20:44

Re: was wie ein keygen erstellen
 
Zitat:

Zitat von wellilein
Vollständig war meine Absicht, aber warum wenig hilfreich :?:

Weil er - wie gesagt - wohl bereits Probleme hat, es in Delphi hinzubekommen, dann wird es ihm wohl auch nicht gerade leichtfallen, C# in Delphi zu übersetzen ;)
Zitat:

Zitat von wellilein
Indem ich die Lösung in C# vorgebe muss er es selbst nach Delphi umsetzen.
Zudem hat er ja noch gar nicht gesagt, in welcher Sprache er das ganze umsetzen will. Vielleicht Delphi.NET?
An der fehlenden OO von Delphi kann es auch nicht liegen. Mit OO hat das ganze nichts zu tun. Das hier ist funktionale Programmierung und das hab ich bei meinem C# bereits berücksichtigt.

Nein, darum gehts mir nicht. Die Sache mit den Zufallszahlen läuft unter C# eben anders ab als unter Delphi, und genau danach hatte er ja gerade gefragt. Da nützt es wenig, ihm zu zeigen, wie es ihn C# läuft ;)
Und daß es um Delphi und nicht .NET geht, erkennst du daran, daß als Sprache Pascal angegeben ist :mrgreen:
Zitat:

Zitat von wellilein
Jedenfalls hat er nichts davon erwähnt, dass er einen CD Key mit der Quersumme 967 möchte, sondern mit einer vorgegebenen Anzahl an vierstelligen Nummern, die er sogar noch aufgelistet hat. Und mich ärgerts ein bisschen, dass niemand darauf eingeht.

Naja, wenn man ihm zeigt, wie er eine Zufallszahl erstellen kann, dann sollte ihm schnell klarwerden, wie er mehrere davon erstellen kann. Gegen den Teil deines Codes habe ich aber auch nichts. Was ich meinte war, daß er die "Eingabe" auf eine völlig andere Art haben möchte. So ganz durchgestiegen bin ich auch nach seiner zweiten Erklärung nicht, aber soweit ich das sehe, soll das alles etwas anders funktionieren... :? Kann mich in dem Punkt aber auch irren :stupid: (Soll auch schonmal vorgekommen sein :lol:)
Zitat:

Zitat von wellilein
Ich sehe schon, wir unterscheiden uns hier von www.experts-exchange.com :?
Nun, ich will zusehen, dass ich zukünftig auf die Lösung hinleite und keinen Code vorgebe.

Jupp, ich sehe schon, wir verstehen uns :mrgreen: Es ist einfach nicht Sinn und Zweck der DP (auch wenn es trotzdem oft getan wird) einfach einen Quellcode vorzucoden. Hat man den Hintergrund nicht verstanden, nützt einem die Hilfe relativ wenig. Daher sollte das Ziel eher sein, schrittweise zur Lösung vorzudringen, bzw den Fragesteller dazu zu animieren, die Lösung mit einiger Hilfe selbst zu finden.

Also nimm meine (ich gebe zu) aggressiven Posts nicht allzu ernst, das ist einfach meine Art ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:10 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz