Autor Beitrag
Henry
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 619

WinXP Prof. SP3
D6 Prof.
BeitragVerfasst: 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.
ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 15.08.07 13:20 
Moin!

user profile iconHenry 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 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 619

WinXP Prof. SP3
D6 Prof.
BeitragVerfasst: Mi 15.08.07 13:28 
Hallo,

da ist nicht viel Code. Aber so sieht die Sache aus:
ausblenden Delphi-Quelltext
1:
2:
StringList.Text := MD5Print(MD5File(Ausgabepfad + 'test.txt'));
StringList.SaveToFile(AusgabePfad + 'hash.txt');

_________________
mfg Henry
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 619

WinXP Prof. SP3
D6 Prof.
BeitragVerfasst: Mi 15.08.07 13:38 
Das ist schon einmal gut ;)
ausblenden 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:
ausblenden 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;
   //   ShowMessage('Die Datei ist nicht echt oder fehlerhaft')
     End;

_________________
mfg Henry
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 15.08.07 13:58 
Moin!

user profile iconHenry 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:
ausblenden volle Höhe Delphi-Quelltext
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  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. :nixweiss:

@user profile iconHeiko: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 15.08.07 14:09 
Moin!

user profile iconChryzler 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. :nixweiss:

user profile iconChryzler 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 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 619

WinXP Prof. SP3
D6 Prof.
BeitragVerfasst: Mi 15.08.07 14:29 
Hallo,

danke für eure Hilfe.
Der Fehler lag an einem ziemlich blöden Tippfehler in der Zeile:
ausblenden Delphi-Quelltext
1:
Hash   := MD5Print(MD5File(ExtractFilePath(paramstr(0) + 'test.txt')));					

Es muss natürlich heißen:
ausblenden Delphi-Quelltext
1:
Hash   := MD5Print(MD5File(ExtractFilePath(paramstr(0)) + 'test.txt'));					

Da muss natürlich etwas anderes herauskommen. :oops: :oops: :oops: :oops: :oops:
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Mi 15.08.07 15:18 
user profile iconNarses hat folgendes geschrieben:
@user profile iconHeiko: Denke, das ist unnötig; ausserdem ist die Unit hier schon im Forum als Anhang, einfach mal suchen. ;)


beim Weihnachtswettbewerb letztes Jahr hatte ich verschiedene MD5-Units gefunden dien oftmals nur "MD5.pas" hießen. Von daher wollte ich die Sicherheitshalber haben.

@Henry: Das sind die schönsten Fehler :mrgreen:
Henry Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 619

WinXP Prof. SP3
D6 Prof.
BeitragVerfasst: Mi 15.08.07 15:30 
user profile iconHeiko hat folgendes geschrieben:

@Henry: Das sind die schönsten Fehler :mrgreen:

Das stimmt, aber danach sucht man immer am längsten ;)

_________________
mfg Henry