Entwickler-Ecke

Sonstiges (Delphi) - Ein Key generator Programmieren


jackie21 - Mi 27.07.05 01:49
Titel: Ein Key generator Programmieren
hi
Ich wollte mal wissen wie das in Delphi funktioniert ein eigener Key Generator zu Programmieren, also ich habe ein DVD Datenbank geschrieben, wo man sich nach ein paar Tagen Registrieren muss, und dazu möchte ich einen Key generator für mein DVD Datenbank schreiben.
Wenn ich in Edit1 z.B. Ein Name eingebe, dann soll jede Buchstabe generiert werden und in Panel1 angezeigt werden, und diese generierte Key soll mein Datenbank dann anehmen können.
Gibt es vieleicht Tutorials oder sowas in der art, wo man das lernen kann, ich bin euch sehr dankbar wenn ihr mir ein paar tips geben könnt wie das genau funktioniert, ich danke euch schonmal :wink:

jackie21


Moderiert von user profile iconGausi: Topic aus Programmierwerkzeuge verschoben am Mi 03.08.2005 um 08:47


DaRkFiRe - Mi 27.07.05 03:36

Was Du brauchst - die Funktion ORD und FORMAT, vielleicht noch CHR.
Der Rest ist pure Mathematik.

Denk Dir eine Funktion aus.
Dabei ist jede Funktion denkbar, denn Du hast Definitions- (Name) und Wertebereich (Serial) auf dem Zielrechner.

Kannst einfach die Zeichen im ASCII Code verschieben. y=x+c. Zu einfach.
Kannst einfach die Zeichen mit einem vordefinierten Code XOR nehmen. y=x XOR c. Zu einfach.
Kannst einfach die Summe der ASCII Codes nehmen und mit einer festen Zahl multiplizieren, das Ergebnis = 32Bit-HexCode.
etc etc

Es gibt soviele Möglichkeiten. Lass Deiner Fantasie freien Lauf!

Jedenfalls musst Du es so sehen: aus einem Namen (A) wird eine Serial (X) im Keygen. Die Software selbst besitzt ebenso diesen Keygen implementiert (als Code). Sie generiert aus dem Namen (B) ebenso eine Serial (Y). Aus der Gleichheit der Algorithmen folgt folgende Äquivalenz: wenn A = B, dann ist auch X = Y - Serial korrekt!


en!gma - Mi 27.07.05 10:26

mal ein kleines beispiel
habs nicht getestet:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
function erstelleKey(benutzername:string):string;
var z : string;
i : integer;
begin
If Length(benutzername) > 0 then begin     // wird halt geprüft ob überhaupt ein username eingegebn wurde
For I := 1 to Length(benutzername) do      //jeder buchstabe wird einzeln durchgegangen
z := z + IntToHex(Ord(benutzername) + $82);//buchstabe wird in ascii umgewandelt mit ord, dann wird 82 hinzuaddiert und anschliessend wieder in 
                                           //hex umgewandelt
result := z + benutzername[0]              //zum schluss werden all ergebnisse zusammengerechnet und nochmal der erste buchstabe des namens angehängt
end else result := 'eingabe darf nciht leer sein';
end;


jackie21 - Mi 27.07.05 13:09

Ich danke dir, aber wenn ich dieses Code jetzt in mein Projekt ausprobieren will dann erhalte ich vom Compiler diese Fehlermeldung:

[Error] Unit1.pas(32): Incompatible types
[Error] Unit1.pas(34): Element 0 inaccessible - use 'Length' or 'SetLength'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

da ist irgandwo ein kleiner fehler drinn, ich weiss nur nicht wo, könntest du mir bitte schreiben wo genau der fehler ist, ich danke dir schonmal für die antwort :wink:

jackie21


hallo - Mi 27.07.05 13:38

Anstatt [0] musst du [1] hernehmen! Dann ist es accessible!


uall@ogc - Mi 27.07.05 13:46

und bei inttohex fehlt nen 2. parameter, da musst du nen ,2 machen

inttohex(irgendwas,2)


jackie21 - Mi 27.07.05 15:27

das funktioniert nicht bei IntToHex, könntest du mir vieleicht schreiben wie du das meinst, ich danke dir schonmal :wink:

jackie21


zemy - Mi 27.07.05 15:59

Mal ne ganz dumme Idee...


Delphi-Quelltext
1:
 Serial:= MD5 ( Name + '_dummyText');                    


^^ Bräuchteste nur noch ne MD5-Funktion (oder irgend ein anderer Hashalgorythmus..)

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.


jackie21 - Mi 27.07.05 16:16

ich kenne mich zwar noch nicht so perfekt in Delphi aus, daher wollte ich fragen ob ihr mir vieleicht den Komplette Quelltext posten könnt, das wenn ich auf Button1 Klicke, dann soll den Name von Edit1.Text als generierte Key in Panel1.Caption angezeigt werden, ich bin euch sehr dankbar wenn ihr das machen könnt, ich danke euch schonmal :cry:

jackie21


DaRkFiRe - Mi 27.07.05 16:26

Also wer ein bisschen Ahnung hat, der sieht: oh, 32 Zeichen, davon auch noch Hexcodes - könnte MD5 sein - hasht, und schon hat er ne Serial - neee, zu einfach!!!


zemy - Do 28.07.05 15:03

Deshalb noch der Dummytext. Müsste man nur noch ein bissel eleganter anstellen. Stet ja sonst fast im Klartext in der Exe :D Kannst ja auch nur die ersten 16 (10, 8, ... ) Zeichen nehmen oder noch 'n XOR drüber jagen. Dann ist der Hash nicht mehr zu erkennen.

PS: Sorry wegen Delphitags, war eigentlich nur als Pseudocode gedacht...


jaenicke - Do 28.07.05 15:15

user profile iconjackie21 hat folgendes geschrieben:
ich kenne mich zwar noch nicht so perfekt in Delphi aus, daher wollte ich fragen ob ihr mir vieleicht den Komplette Quelltext posten könnt, das wenn ich auf Button1 Klicke, dann soll den Name von Edit1.Text als generierte Key in Panel1.Caption angezeigt werden, ich bin euch sehr dankbar wenn ihr das machen könnt, ich danke euch schonmal :cry:

Das solltest du schon selbst versuchen! Wenn du wo nicht weiterkommst, können wir dir helfen, aber kompletten Source? Das ist nicht Sinn des Forums.
Und vor allem wäre es wohl auch kaum sinnvoll, oder?
Jeder, der diesen Post deinem Programm zuordnet, weiß sofort, wie dein Key erzeugt wird.
Wie bereits weiter oben angesprochen, da musst du dir eine mathematische Methode überlegen, wie du die Verschlüsselung durchführst.

Es gibt zum Beispiel XOR, wenn man das zweimal mit nem Schlüssel macht, kommt wieder dasselbe raus. Aber dazu steht auch einiges im Netz.

Ein kleiner Code-Schnipsel, wie sowas grundsätzlich geht, von mir aus, aber fertig ist das nicht:

Delphi-Quelltext
1:
2:
3:
4:
for i := 0 to Length(tmpString) do
begin
  Result[i] := Chr(Ord(tmpString[i]) xor Key[i]);
end;

Sollte so ungefähr gehen. Dabei muss Key genauso lang wie der String sein und array of Byte sein.

Das sollte in beide Richtungen gehen.


ShiKai - Mi 03.08.05 01:43

meinst du nicht, dass ein ein one time pad ein bissel zuviel des guten
ist? :lol:
ich mache das meistens so, dass ich nicht nur nen namen von dem user
haben will, sondern auch eine e-mail-addy...
damit hat man dann also gleich 2 daten, die man nutzen kann...

dann kannt du ja z.b. den namen mit der addy und das ergebnis nochmal
mit dem namen "verschlüsseln" oder weiß der geier...


wfg,
ShiKai

Moderiert von user profile iconTino: PGP Signatur entfernt.