![]() |
MD5 unter x32 anders als unter x64
Ich nutze folgenden Code um ein MD5 Hash zu erstellen
Delphi-Quellcode:
Aber wenn ich eine 32Bit Exe mach ist alles schön aber unter 64 Bit kommt ein andere Hash raus
Function MD5(const Text : string) : string;
var idmd5 : TIdHashMessageDigest5; begin idmd5:=TIdHashMessageDigest5.Create; Result:=idmd5.HashStringAsHex(Text); idmd5.Free; End; |
AW: MD5 unter x32 anders als unter x64
Eingangs- und Ausgangsdaten für beide Fälle lauten?
|
AW: MD5 unter x32 anders als unter x64
Kann ich bei mir nicht nachstellen.
Delphi-Quellcode:
liefert unter 32 und 64 das Gleiche bei mir (getestet mit 10 Seattle).
MD5('Hallo Welt')
|
AW: MD5 unter x32 anders als unter x64
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! |
AW: MD5 unter x32 anders als unter x64
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. |
AW: MD5 unter x32 anders als unter x64
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
Delphi-Quellcode:
die Bytefolge für den string zu beschaffen und diese dann zu vergleichen. Dann durch den Hash-Algorithmus jagen.
TEncoding.GetBytes
Jetzt kann man zuverlässig sagen, wo sich der Fehler befindet, sollte er überhaupt noch da sein. |
AW: MD5 unter x32 anders als unter x64
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:
statt neu
function ROL(const AVal: LongWord; AShift: Byte): LongWord; assembler;
asm mov cl, dl rol eax, cl end;
Delphi-Quellcode:
Ein Update der Indys sollte also Abhilfe schaffen.
// 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; Viele Grüße... |
AW: MD5 unter x32 anders als unter x64
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz