Delphi-PRAXiS

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)

battlemonster 20. Sep 2006 20:17


was wie ein keygen erstellen
 
also ich sowas wie ein keygen erstellen
ich würde ihm keys geben wie zb. 1234-1234-1234-1234
und dann immer verschiedene in der art

2345 8568 5648 3738
3456 7933 2473 2893
4567 2214 3839 3949
5678 6454 2847 8394

also ich würde 4 editfelder haben für eine block eins wie im beispiel
und im erstem editfeld wählt er mit 4 zahlen aus zb 5678 dann im 2 auch 7933 usw
also nimmt er sich immer eins und mixt es zu einer vollstendigen seriennummer zusammen.

im erstem editfeld soll er eins diesr nummern zeigen 2345, 3456, 4567, 5678
im zweitem 8568, 7933, ...
im dritten 5648, 2473, ...
im viertem 3738,...

hat jemand vorschläge für so ein teil.

danke im vorraus

Sunlight7 20. Sep 2006 20:27

Re: was wie ein keygen erstellen
 
Für was brauchst Du das?

any_key 20. Sep 2006 20:28

Re: was wie ein keygen erstellen
 
ich weiß zwar nicht genau ob es dazu passt aber ich hab mal gesehen das es unter http://www.dsdt.info/tipps/?id=646 ne tutorial gibt wie man das machen kann...

battlemonster 20. Sep 2006 20:29

Re: was wie ein keygen erstellen
 
Zitat:

Zitat von Sunlight7
Für was brauchst Du das?

ich habe mir ein programm gebastelt und so zum spaß habe ichs gemacht das es erst registriert werden muss und dazu ein keygen wäre net habe ich mir so gedacht.
will ich so zum eigenbedarf

Balu der Bär 20. Sep 2006 21:07

Re: was wie ein keygen erstellen
 
Für den Eigenbedarf? Ich dachte um deinen Lehrer zu ärgern? :gruebel: :mrgreen:

(Siehe Crossposting: http://www.winboard.org/forum/softwa...erstellen.html )

omata 20. Sep 2006 21:21

Re: was wie ein keygen erstellen
 
. .

leddl 20. Sep 2006 21:45

Re: was wie ein keygen erstellen
 
Ich versteh irgendwie nicht, was dein Problem ist. Das könnte unter anderem aber auch daran liegen, daß ich - wenns hochkommt - nur jedes 5. Wort verstehe, das du in deinem Post geschrieben hast. Lass dir doch mal Zeit für sowas und schreib etwas, das man auch ohne nen Doktor in Sprachwissenschaften verstehen kann...

Zu deinem Problem:
Sollen diese Keys auch generiert werden, oder hast du die bereits fertig und willst sie nur zufällig anzeigen lassen?
Falls ersteres: Wo ist das Problem? Zufällig (Stichwort Delphi-Referenz durchsuchenRandom) einen Key auswählen und dann jeweils 4 Zeichen in einer Edit-Box anzeigen (Stichwort Delphi-Referenz durchsuchenPos Delphi-Referenz durchsuchenCopy)
Falls letzteres: Wird ein bestimmter Algorithmus benötigt (soll der Key also irgendwelchen Anforderungen genügen?), oder soll die Zahl rein zufällig sein?

Bitte tu uns (und damit vor allem dir selbst) den Gefallen und schreib bitte deutlich, was du willst. So ein Rumgewurschtel wie im Ausgangspost kann man einfach nicht entziffern...

wellilein 21. Sep 2006 02:25

Re: was wie ein keygen erstellen
 
Irgendwie wirst Du hier nicht verstanden...
Zugegeben. ich hab auch lange gebraucht, bis ich verstanden habe, was Du willst und in welcher Reihenfolge man die Tabelle lesen muss.

Ich definiere mal:
1. User Interface mit 4 Textboxen
2. 4 Listen (je Textbox eine) mit gültigen 4-stelligen Zahlen für die Seriennummer
3. Der Benutzer wählt durch Eingabe einer einstelligen Zahl jeweils eine 4-stellige Zahl aus der Liste
4. Irgendwo wird die vollständige Seriennummer in der Form xxxx-xxxx-xxxx-xxxx angezeigt

Mir stellt sich dabei die Frage:
a. Warum nimmst Du keine Combo-Boxen, aus denen man die Werte auswählen kann? Dann spart man sich das Tippen.
b. Warum muss man überhaupt etwas eintippen/auswählen? Dann ist ja groß nichts generiert...

Ich hab das ganze mal ohne großes User-Interface mit Zufallsauswahl in Pseudo-Code verfasst:

Delphi-Quellcode:
// Initialisieren
List[] numbers = new List[4];
List[0] = { "2345", "3456", "4567", "5678", ...};
List[1] = { "8568", "7933", "2473", "3839", ...};
List[2] = { "5648", "2214", "3839", "2847", ...};
List[3] = { "3738", "6454", "3949", "8394", ...};

string serial = "";

// Generieren
for(i=0; i<List.Length; i++)
{
  r = Random(List[i].Length); // Eine zufällige Zahl zwischen 0 und der Länge der Liste generieren.
  serial += List[i][r];
  serial += "-";
}

// Ausgeben
textbox1.Text = serial;
Am Ende steht in textbox1 eine generierte Seriennummer.

Gruß, Thomas

vlees91 21. Sep 2006 07:23

Re: was wie ein keygen erstellen
 
:gruebel:
:wiejetzt:
Was willst du, wie kommst du an die 7933?
ist das irgendeine logik, wenn ja nenne sie, wenn nein: nimm Random.
aber dazu könntest du ja auch selber dann im programm wild auf den ziffernblock hauen, und der sinn einer seriennummer ist es ja schön lange davor zu sitzen -.-


edit: http://www.winboard.org/forum/305029-post13.html ahhhhh
okay, dann wie mein vorgänger schrieb.

(vll ist er ja nicht battlemonster^^)

Nils_13 21. Sep 2006 07:36

Re: was wie ein keygen erstellen
 
Bei jedem Programmstart zufallst du einfach eine neue Nummer und der andere wird das nie zum Laufen bekommen, außer er deaktiviert den Vorgang :mrgreen:

Thorben77 21. Sep 2006 08:50

Re: was wie ein keygen erstellen
 
[OT]
Zitat:

Zitat von Nils_13
Bei jedem Programmstart zufallst du einfach eine neue Nummer.

Interessantes Verb, „zufallen“, kannte ich noch gar nicht :wink: .
[/OT]

battlemonster 21. Sep 2006 11:56

Re: was wie ein keygen erstellen
 
Zitat:

Für den Eigenbedarf? Ich dachte um deinen Lehrer zu ärgern?
das auch

also ich will ein programm haben das mir (lehrer auch), wenn ich ein button drücke eine belibige seriennummer zeigt.
die seriennummern würde ich ihm vorher sagen aber nicht mehr im endprogramm verändern können.
und dann dachte ich das er sich einfach eine nummer zusammen mixt.
also ich habe 4 editfelder. jedes editfeld hat 4 verschiedene teile dieser seriennummer die nur für dieses editfeld bestimmt sind (ein teil besteht aus 4 zahlen)
und er sucht eins der 4 teile aus und zeigt es.
diesen vorgang macht jedes editfeld bis ich eine nummer angezeigt bekommen die aus 4 teilen (es könnte auch anders angezeigt werden) (ein teil 4 zahlen also 16 zahlen soll die nummer haben.)

das müsste so aussehen das er ein teil von den 4 teilen (oder mehr) zufällig auswählt und anzeigt

battlemonster 21. Sep 2006 16:19

Re: was wie ein keygen erstellen
 
ich habe versucht es bischen besser zu erklären

panzerfischer 21. Sep 2006 16:35

Re: was wie ein keygen erstellen
 
also wenn ich meine programme zum registrieren mache, lasse ich das prog. ne seriennummer renerieren, die irgendwo gespeichert wird, und der user muss zu dieser nummer eine 2 eingeben, die sich aus der einen errechnen lässt, um das prog. frei zu schalten, hat den vorteil, das jeder user genau die id brauch, die ihm das prog sagt, und keine belibige

bestes beispiel, du lässt 4 nummern generieren (mit random) die 5 stellig sind,

die einzugebene zahl ist die wurzel (oder belibig andere nichtlin. fkt)auf 5 stellen erweitert

also

rechner generiert die 12345 und man muss die 11110 eingeben (trunc(sqrt(x)*100))

dieser code kann auch nur sehr schwer geknackt werden, weil es sich 1: um eine nichtlineare funktion handelt, und 2: weil keiner weiß welche, und du kannst zur not einen serial mit dem Taschenrechner ausrechnen

battlemonster 21. Sep 2006 19:16

Re: was wie ein keygen erstellen
 
es gibt doch diese dinger random und randomize kann ich damit eine zufällige zahl von insgesamt 4 anzeigen.
wenn ja wie?

panzerfischer 21. Sep 2006 19:22

Re: was wie ein keygen erstellen
 
randomize startet den zufalls generator,

random(10) gibt dir ne zufallszahl von 0 bis 10 aus, warscheinlichkeiten sind gleichmäßig verteilt

so sieht das im text aus:
Delphi-Quellcode:
randomize;
v1:random(99999);
v2:random(99999);
...
randomize;
so oder so ähnlich, wie genau das funktioniert weiß ich nicht, aber vll, kann das wer anders erklären, jedenfalls funktioniert das so ganz gut

leddl 21. Sep 2006 19:35

Re: was wie ein keygen erstellen
 
Zitat:

Zitat von panzerfischer
random(10) gibt dir ne zufallszahl von 0 bis 10 aus, warscheinlichkeiten sind gleichmäßig verteilt

Stimmt nicht ganz, es sei denn, du meinst mit "bis" "bis exklusiv" ;)

Zitat:

Zitat von panzerfischer
so sieht das im text aus:
Delphi-Quellcode:
randomize;
v1:random(99999);
v2:random(99999);
...
randomize;

So bitte nicht ;) Randomize sollte nur ein einziges mal aufgerufen werden. Das also am besten ins OnCreate.
Eine Zufallszahl von 1 bis 4 gibts dann durch folgenden Code:
Delphi-Quellcode:
zahl := random(4)+1;
Lies dir aber am besten mal die Beschreibung in der OH durch, die ist doch eigentlich recht gut erklärt...

battlemonster 21. Sep 2006 19:38

Re: was wie ein keygen erstellen
 
ich will ihm aber 4 zahlen (oder mehr) und eine davon soll der zufällig auswehlen und anzeigen.
geht das auch?

leddl 21. Sep 2006 19:42

Re: was wie ein keygen erstellen
 
Zitat:

Zitat von battlemonster
ich will ihm aber 4 zahlen (oder mehr) und eine davon soll der zufällig auswehlen und anzeigen.
geht das auch?

:roll: Und was hindert dich daran, den Code einfach mehrmals auszuführen und die Zahlen hintereinanderzusetzen? :roll:

panzerfischer 21. Sep 2006 19:48

Re: was wie ein keygen erstellen
 
du kriegst im übrigen auch bei jedem mal ne ander zahl, also im o.g. beispiel ist v1<>v2 (mit sehr hoher warscheinlichkeit)

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 02:28 Uhr.

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