AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

MD5 unter x32 anders als unter x64

Ein Thema von franktron · begonnen am 1. Jul 2016 · letzter Beitrag vom 4. Jul 2016
Antwort Antwort
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

MD5 unter x32 anders als unter x64

  Alt 1. Jul 2016, 15:01
Ich nutze folgenden Code um ein MD5 Hash zu erstellen
Delphi-Quellcode:
Function MD5(const Text : string) : string;
var
  idmd5 : TIdHashMessageDigest5;
begin
  idmd5:=TIdHashMessageDigest5.Create;

  Result:=idmd5.HashStringAsHex(Text);

  idmd5.Free;
End;
Aber wenn ich eine 32Bit Exe mach ist alles schön aber unter 64 Bit kommt ein andere Hash raus
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: MD5 unter x32 anders als unter x64

  Alt 1. Jul 2016, 17:03
Eingangs- und Ausgangsdaten für beide Fälle lauten?
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.158 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: MD5 unter x32 anders als unter x64

  Alt 1. Jul 2016, 17:19
Kann ich bei mir nicht nachstellen.  MD5('Hallo Welt') liefert unter 32 und 64 das Gleiche bei mir (getestet mit 10 Seattle).
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#4

AW: MD5 unter x32 anders als unter x64

  Alt 2. Jul 2016, 01:01
Vielleicht verwendest du zwei Delphi-Versionen (hättest du klären sollen, sonst wüsst ich es genau);
die eine, mit der du die 32 Bit Version erzeugst, verwendet String, die andere, die die 64 Bit Version erzeugt,
verwendet WideString.
Letztendlich hash't du somit zwei verschiedene Datensätze!

Änder mal String um auf AnsiString!
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#5

AW: MD5 unter x32 anders als unter x64

  Alt 2. Jul 2016, 16:31
Na wenn schon, dann doch eher UTF-8, da es sonst beim Unicode ein paar "Verluste" geben könnte.

Viele Hash-Libs arbeiten "geziehlt" mit Integerüberläufen und bei 64 Bit könnte es da natürlich Problemchen geben, wenn dort Mist gebaut wurde.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: MD5 unter x32 anders als unter x64

  Alt 2. Jul 2016, 17:11
Ein Hash wird nur auf Basis von Bytefolgen berechnet.

Um wirklich sicher zu sein, dass man auch wirklich das gleiche vergleicht, dann prüft man die Bytefolgen vor dem Hashen. Alles andere ist nur blindes Herumgestochere.

Ein guter Ansatz ist schonmal sich per TEncoding.GetBytes die Bytefolge für den string zu beschaffen und diese dann zu vergleichen. Dann durch den Hash-Algorithmus jagen.

Jetzt kann man zuverlässig sagen, wo sich der Fehler befindet, sollte er überhaupt noch da sein.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Peter1999

Registriert seit: 13. Dez 2007
Ort: Dresden
88 Beiträge
 
Delphi XE2 Professional
 
#7

AW: MD5 unter x32 anders als unter x64

  Alt 3. Jul 2016, 14:51
Der Bug ist unter XE2 reproduzierbar, unter Seattle ist er behoben.

Der Bug lag in den Indys in der Unit IdGlobalProtocols.pas.
Dort ist die Function ROL in der Version bei XE2 falsch implementiert.

Delphi-Quellcode:
function ROL(const AVal: LongWord; AShift: Byte): LongWord; assembler;
asm
  mov cl, dl
  rol eax, cl
end;
statt neu
Delphi-Quellcode:
// 32-bit: Arg1=EAX, Arg2=DL
// 64-bit: Arg1=ECX, Arg2=DL
function ROL(const AVal: UInt32; AShift: Byte): UInt32; assembler;
asm
  {$IFDEF CPU64}
  mov eax, ecx
  {$ENDIF}
  mov cl, dl
  rol eax, cl
end;
Ein Update der Indys sollte also Abhilfe schaffen.

Viele Grüße...
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#8

AW: MD5 unter x32 anders als unter x64

  Alt 4. Jul 2016, 09:00
Der Bug ist unter XE2 reproduzierbar, unter Seattle ist er behoben.

Der Bug lag in den Indys in der Unit IdGlobalProtocols.pas.
Dort ist die Function ROL in der Version bei XE2 falsch implementiert.

Delphi-Quellcode:
function ROL(const AVal: LongWord; AShift: Byte): LongWord; assembler;
asm
  mov cl, dl
  rol eax, cl
end;
statt neu
Delphi-Quellcode:
// 32-bit: Arg1=EAX, Arg2=DL
// 64-bit: Arg1=ECX, Arg2=DL
function ROL(const AVal: UInt32; AShift: Byte): UInt32; assembler;
asm
  {$IFDEF CPU64}
  mov eax, ecx
  {$ENDIF}
  mov cl, dl
  rol eax, cl
end;
Ein Update der Indys sollte also Abhilfe schaffen.

Viele Grüße...
Danke ich werde mal Updaten
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:10 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