| Autor |
Beitrag |
Henry
      
Beiträge: 619
WinXP Prof. SP3
D6 Prof.
|
Verfasst: Mi 15.08.07 12:55
Hallo,
ich möchte in verschiedenen meiner Programme Serirnnummern mit MD5 verschlüsseln.
mit einem String klappt das auch wie folgt ganz gut.
Delphi-Quelltext 1:
| string = MD5Print(MD5String('test') |
nun möcvhte ich aber den Hashwert einer Datei ermitteln und diesen in einer weiteren Datei speichern.
Das mache ich wie folgt:
Delphi-Quelltext 1:
| Hash := MD5Print(MD5File(ExtractFilePath(paramstr(0) + 'test.txt'))); |
Das klappt prinzipiell auch, wenn ich in dem Programm mit dem ich die Schlüssel erstelle den wert vergleiche stimmt er.
Wenn ich allerdings die Datei in das Programmverzeichnis eines anderen Programms kopiere und mit diesem den Hash auslese, schlägt der Vergleich mit dem in der zweiten Datei gespeicherten Wert fehl.
Woran liegt das? Wird der Pfad zur Datei mit verschlüsselt? Das ist nämlich das einzige was sich an den Dateien unterscheidet, denn ich möchte die Datei ja auf Echtheit prüfen und nicht ob sie im selben Verzeichniss steht (das kann sie natürlich nicht).
Kann mir da jemand helfen?
Danke schon einmal
_________________ mfg Henry
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 15.08.07 13:20
Moin!
Henry hat folgendes geschrieben: | | nun möcvhte ich aber den Hashwert einer Datei ermitteln und diesen in einer weiteren Datei speichern. |
Tippe mal, da liegt der Fehler. Zeig mal den Code.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Henry 
      
Beiträge: 619
WinXP Prof. SP3
D6 Prof.
|
Verfasst: Mi 15.08.07 13:28
Hallo,
da ist nicht viel Code. Aber so sieht die Sache aus:
Delphi-Quelltext 1: 2:
| StringList.Text := MD5Print(MD5File(Ausgabepfad + 'test.txt')); StringList.SaveToFile(AusgabePfad + 'hash.txt'); |
_________________ mfg Henry
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 15.08.07 13:31
Moin!
Yup, ist OK; zeig mal den Vergleichscode (also der den Wert wieder liest).
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Henry 
      
Beiträge: 619
WinXP Prof. SP3
D6 Prof.
|
Verfasst: Mi 15.08.07 13:38
Das ist schon einmal gut
Delphi-Quelltext 1: 2: 3:
| StringList.LoadFromFile(ExtractFilePath(paramstr(0)) + 'hash.txt'); ... Hash := MD5Print(MD5File(ExtractFilePath(paramstr(0) + 'test.txt'))); |
Wenn ich mir diese beiden Werte anteigen lasse, dann gibt es schon einen Unterschied.
Wie gesagt der einzige Unterschied ist, das die Dateien in einem anderen Verzeichnis liegen.
Verglichen wird so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| If Hash = StringList.Strings[0] then Begin Authpruefung := True; End Else Begin Authpruefung := False; End; |
_________________ mfg Henry
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: Mi 15.08.07 13:56
Hallo,
kannst du uns mal die MD5-Unit geben? Dann kann man sich das mit MD5File etc. mal angucken, ob man in der Unit da was findet (als Ursache).
Grüße
Heiko
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 15.08.07 13:58
Moin!
Henry hat folgendes geschrieben: | Wenn ich mir diese beiden Werte anteigen lasse, dann gibt es schon einen Unterschied.
Wie gesagt der einzige Unterschied ist, das die Dateien in einem anderen Verzeichnis liegen. |
Bist du da auch wirklich ganz sicher?
Hab das mal gerade hiermit getestet:
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: 40: 41: 42: 43: 44:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, MD5;
type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; Edit2: TEdit; Button2: TButton; OpenDialog1: TOpenDialog; OpenDialog2: TOpenDialog; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin if OpenDialog1.Execute then Edit1.Text := MD5Print(MD5File(OpenDialog1.FileName)); end;
procedure TForm1.Button2Click(Sender: TObject); begin if OpenDialog2.Execute then Edit2.Text := MD5Print(MD5File(OpenDialog2.FileName)); end;
end. |
Funktioniert mit einer kopierten Datei in unterschiedlichen Verzeichnissen einwandfrei.
@ Heiko: Denke, das ist unnötig; ausserdem ist die Unit hier schon im Forum als Anhang, einfach mal suchen.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Chryzler
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Mi 15.08.07 14:03
Bin mir ziemlich sicher, dass es an der StringList liegt. Die setzt da automatisch nen CRLF dahinter oder so. Wenn du nen TFileStream nimmst, sollte es sicher gehen. Ist zwar mehr Arbeit, aber dafür auch besser geeignet.
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 15.08.07 14:09
Moin!
Chryzler hat folgendes geschrieben: | | Bin mir ziemlich sicher, dass es an der StringList liegt. Die setzt da automatisch nen CRLF dahinter oder so. |
Ich will diese Vermutung nicht als unmöglich abweisen, aber da er auch .LoadFromFile verwendet, sollte das keine Rolle spielen.
Chryzler hat folgendes geschrieben: | | Wenn du nen TFileStream nimmst, sollte es sicher gehen. Ist zwar mehr Arbeit, aber dafür auch besser geeignet. |
Nicht falsch, aber vermutlich auch nicht die Lösung.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Henry 
      
Beiträge: 619
WinXP Prof. SP3
D6 Prof.
|
Verfasst: Mi 15.08.07 14:29
Hallo,
danke für eure Hilfe.
Der Fehler lag an einem ziemlich blöden Tippfehler in der Zeile:
Delphi-Quelltext 1:
| Hash := MD5Print(MD5File(ExtractFilePath(paramstr(0) + 'test.txt'))); |
Es muss natürlich heißen:
Delphi-Quelltext 1:
| Hash := MD5Print(MD5File(ExtractFilePath(paramstr(0)) + 'test.txt')); |
Da muss natürlich etwas anderes herauskommen.
Nach der Korrektur ging es auch mit der Stringlist
@Heiko: md5.pas habe ich Dir trotzdem mal angehängt
Einloggen, um Attachments anzusehen!
_________________ mfg Henry
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: Mi 15.08.07 15:18
|
|
Henry 
      
Beiträge: 619
WinXP Prof. SP3
D6 Prof.
|
Verfasst: Mi 15.08.07 15:30
_________________ mfg Henry
|
|