Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Hashproblem (https://www.delphipraxis.net/35995-hashproblem.html)

freak4fun 14. Dez 2004 15:03


Hashproblem
 
Hallo,
dieser Befehl gibt immer den gleichen Wert aus, auch wenn man den Text in der Key_Edit ändert.

Delphi-Quellcode:
  Hash_Edit.Text := MD5Print(MD5.MD5File(Key_Edit.Text));
Warum? :gruebel:

Hier die md5.pas

mfg
freak

SubData 14. Dez 2004 15:04

Re: Hashproblem
 
Wenn du n Hash-Problem hast, würd ich mal die Drogenberatung aufsuchen :mrgreen:

Kann es sein, dass das Ding ne Datei erwartet und keinen String?

freak4fun 14. Dez 2004 15:07

Re: Hashproblem
 
Ja, steht ja da. :wall:

mfg
freak

Die Muhkuh 14. Dez 2004 15:10

Re: Hashproblem
 
Hi,

sollte das nicht MD5.MD5String heißen?

freak4fun 14. Dez 2004 15:11

Re: Hashproblem
 
Jepp. :roll:

Wer lesen kann ist klar im Vorteil. :mrgreen:

mfg
freak

SubData 14. Dez 2004 15:15

Re: Hashproblem
 
Ich möchte die Gelegenheit nutzen und nochmal auf die Drogenberatung verweisen -roflwech- :mrgreen:

freak4fun 14. Dez 2004 15:18

Re: Hashproblem
 
[OT] Ja, ich bin jetzt auf Programmieren & Cola als Ersatzdrogen umgestiegen. Bin mir aber nicht sicher was jetzt das schlimmere ist. :mrgreen: [/OT]

Wie setz ich den/das Hash jetzt ein? :gruebel:

mfg
ferak

SubData 14. Dez 2004 15:21

Re: Hashproblem
 
Kommt drauf an wofür du ihn brauchst -g-

freak4fun 14. Dez 2004 15:26

Re: Hashproblem
 
Da sist mein Problem. Ich will den SourceCode nicht posten. :zwinker:

Also ich arbeite ja immernoch an meinem KeyGenerator.

Ich hab eine .exe da geb ich Name und Key ein. Jetzt soll geprüft werden ob der Key gültig ist. Das will ich aber mit einem Hashwert des Keys machen. Die Prüfung findet in einer dll statt.

Problem: Ich erstelle den HashWert bei Erzeugung des Keys. Muss ich den dann irgendow Speichern?
Woher weiss ich welcher HashWert zu welchem Key gehört? ...

mfg
freak

SubData 14. Dez 2004 15:28

Re: Hashproblem
 
MD5 ist ne einseitige Verschlüsselung...
Bedeutet: Wenn du nen Key hast, kannst du den zum Hash machen und prüfen ob er identisch ist mit dem Hash, wenn du nur den Hash hast kannst du daraus NICHT wieder den originalen Key machen...

shmia 14. Dez 2004 15:28

Re: Hashproblem
 
Die Funktion MD5File(N: string) erzeugt blöderweise keine Exception, wenn die Datei nicht
geöffnet werden konnte und liefert dann immer den Hashwert eines Leerstrings zurück. :wall:
Deshalb:
Delphi-Quellcode:
function MD5File(N: string): MD5Digest;
var
   FileHandle: THandle;
   MapHandle: THandle;
   ViewPointer: pointer;
   Context: MD5Context;
begin
   MD5Init(Context);
   FileHandle := CreateFile(pChar(N), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE,
      nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_SEQUENTIAL_SCAN, 0);
   if FileHandle <> INVALID_HANDLE_VALUE then
      raise EReadError.CreateFmt('Can''t open file <%s>', [N]);

Tonic1024 14. Dez 2004 15:29

Re: Hashproblem
 
du kannst doch wenn du den Key hast jederzeit wieder den hashwert dazu ermitteln, und die Beiden vergleichen.

Das kannst du in einer Datenbank (oder sonstwie) speichern, oder halt zur Laufzeit immerwieder ermitteln...

Die Muhkuh 14. Dez 2004 15:30

Re: Hashproblem
 
Hi,

der HashWert ist immer einmalig. "Hallo" ergibt einen anderen wert wie "hallo". Es kommt also auch auf Groß/Kleinschreibung an.

freak4fun 14. Dez 2004 15:34

Re: Hashproblem
 
Hm...
ich schicke Name und Key an die H.dll und will ein richtig oder falsch zurückbekommen. Das heisst auf deutsch das es Sinnlos ist. Weil dan irgendein Cracker meine H.dll erstzt und dann ist alles hin. Aber irgendwie muss ich doch nen Schutz erreichen?!

mfg
freak

Tonic1024 14. Dez 2004 16:06

Re: Hashproblem
 
Äehm...


Einen gewissen Schutz erreichst du nur, wenn du beim Programmstart jedes mal prüfst, ob dein programm noch auf dem Rechner Läuft, auf dem du es installiert/registriert hast.

Eine 100% Schutz gibte es nicht. Aber man kann allen Kiddies und Noobs das Leben schon schwer machen, indem du dir solche schweinereien ausdenkst. Die Geschichte mit dem Hash ist ne feine Sache, wenn man Passwörter oder sowas "verschlüsselt" speichern will.

Die Geschichte Mit der DLL würde ich kippen... Braucht nur jemand ne DLL hinstellen, die immer - was auch kommt - True ausgibt und fertig...

Delphi-Quellcode:
  function sowiso(Bla, Blaa, Blaaa: irgendwas):Boolean;
  begin
    result:=true;
  end;
du könntest einen Key (einen 32 Stelligen Hash) in der Registry ablegen, der den Computernamen (schlechtes Beispiel - irgendwas halt) enthält. Wenn noch kein Eintrag existiert, wird der CD-Key (aufbewahren!!) abgefragt, der liesst etwas persönliches aus dem Computer aus, erstellt einen Hash davon und speichert den weg. Jedesmal wenn dein Programm startet, könnte dieser hash nochmal ermittelt werden und mit dem alten aus der registry verglichen.

In die registry darfst du natürlich nur einmal schreiben. Nämlich dann, wenn der CD-Key richtig eingegeben wurde.

Wenn nun der Hash nicht übereinstimmt kannst du A) den user auffordern einen neuen Key anzufordern (Gültigkeit festlegen) oder schlicht nochmal neu eingeben...

Aber das ist nur eine Möglichkeit. Deiner Phantasie sind da keine grenzen gesetzt. Und wie gesagt 100% sicher gibts nicht und 99% nur mit enormen Aufwand.


MfG

Tonic

freak4fun 14. Dez 2004 16:11

Re: Hashproblem
 
Dankeschön.

Also ich hab ja das mit der .dll auch gemacht weil ioch mal was mit .dll's machen wollte. Ich würde ja auch nicht nur flase oder true hin und herschicken. ;)

### Ich überleg mir was feines. ###

mfg
freak


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:25 Uhr.

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