![]() |
Big-Endian nach Little-Endian
Hi,
ich habe mir heute mal den MD5-Algorithmus angesehen, den Assarbad hier gepostet hat ( ![]() Nun nannte er mir gerade noch die Stichwörter Big Endian und Little Endian. Über Google habe ich dann auch soweit herausgefunden, was das ist (wusste es bereits, hatte es aber verdrängt). Im BDN habe ich auch einen Artikel gefunden, der beschreibt, wie man Double's konvertiert. Allerdings ist das Ergebnis eines MD5-Algorithmus ja nicht gerade Double-Mäßig, sondern eher ein Mix aus Zahlen und Buchstaben. Google hat mir aber nichts dazu gesagt, wie ich mit Delphi einen MD5-Code hin-und-her-konvertiere. Darum wende ich mich mal wieder an die DP und hoffe auf Hilfe zu dieser Frage. ;) Chris PS: Ich wünsche mir keine Diskussion darüber, ob ich wirklich MD5 verwenden soll, oder nicht. Es geht mir hier nur darum schnellstmöglich mal eben für PHP sowas zu schreiben, weil ich immer wieder diese Werte brauche. |
Re: Big-Endian nach Little-Endian
Per Definition ist der MD5 Digest ein Array[0..15] of Byte. Somit ist eine Konvertierung überhaupt nicht erforderlich, da auf Big Endian und Little Endian Maschinen das Array[0..15] immer identisch im Speicher abgelegt wird. Erst wenn man mit Datentypen wie Word oder Integer oder Int64 arbeitet entstehen die Probleme.
Es gibt einige Big Endian MD5, XYZ Hash Impelemntierung die dummerweise irgendwas in BigEndian konvertieren wollen, aber dies ist grundsätzlich falsch bei Hash Digest's (ausser Haval) Zb. beim Blowfish Verschlüsselungs Algo. gab es da schlimme Verwirrungen da Bruce Schneier darüber keinerlei Aussagen getroffen hat. Gruß Hagen |
Re: Big-Endian nach Little-Endian
mal ne dumme frage, was ist denn big/little-endian?
|
Re: Big-Endian nach Little-Endian
Hi,
@PN: ![]() @Hagen: hm. Dann frage ich mich folgendes: wenn PHP mir bei einem beliebigen String mit md5() den Wert d41d8cd98f00b204e9800998ecf8427e ausgibt und mein Delphiprogramm, dass nach Assarbad's MD5-Eintrag in der CodeLib folgendermaßen aussieht
Delphi-Quellcode:
dann 47f8a3c383d73373f3830ba72f02aad3 ausgibt, woran das liegen kann!? ... :gruebel:
function MD5String(s:String): TMD5digest;
begin result := MD5_Hash_OverBuffer( @s[1], Length(s) ); end; function CreateMD5(s: String): string; begin Result := MD5_Hash2String(MD5String(s)); end; procedure TfrmMain.Button1Click(Sender: TObject); begin edtOutput.Text := CreateMD5(edtInput.Text); end; Chris |
Re: Big-Endian nach Little-Endian
Zitat:
Gruß Hagen |
Re: Big-Endian nach Little-Endian
Also bei mir funktioniert das in PHP problemlose. Da kommt immer was verschiedenes raus (außer man verschlüsselt den gleichen String...)
|
Re: Big-Endian nach Little-Endian
Hi,
nein, PHP gibt immer was anderes aus. Ich wollte jetzt nur nicht sagen, von welchem Wort das genannte der md5-Schlüssel ist... ;) Das Problem ist einfach, dass der "Delphi"-MD5-Hash länger ist (und anders), als das PHP-Derivat (sagt man das so? :gruebel:). Chris |
Re: Big-Endian nach Little-Endian
Zitat:
Zitat:
Zitat:
|
Re: Big-Endian nach Little-Endian
Zitat:
Big Endian ist die Angewohnheit von bestimmten Prozessoren (u.a. Motorola) die Bytes verkehrt herum im Speicher abzulegen. Die Entwicklung ging von 8Bit über 16Bit zu 32Bit Rechnern. Will man Kompatibilität zischen den einzelnen Rechnertypen so wird zwangsläufig ein Little-Endian System herauskommen. Somit sind es die Big-Endian Maschinen die als erstes die Bytes "vertauscht" haben. Nungut man kann sich darüber aber streiten. Beispeil: Der Speicher ist so aufgebaut
Code:
Wir wollen in die obige Zahl lesen,
Zelle 0 1 2 3
$12 $23 $45 $67
Code:
Die Adresse ist aber jedesmal die gleiche im Speicher ! Somit wären Programme auf solchen 8,16,32 Bit Systemen Speicherkompatibel obwohl sie breitere Datenzugriffe benutzen. Dies trifft auf Big-Endian Machinen nicht zu.
8 bit System = Byte = Zelle[0] = $12
16 Bit System = Word = Zelle[1] || Zelle[0] = $23 12 32 Bit System = Long = Zelle[3] || Zelle[2] || Zelle[1] || Zelle[0] = $67 45 23 12 @Chakotay1308, poste mal zwei Beispiele, jeweils PHP und Assarbad's MD5. Gruß Hagen |
Re: Big-Endian nach Little-Endian
Hi,
also... hier die jeweiligen Ausgaben des Strings "mirt459":
Code:
Komisch ist jedoch, wenn ich bspw. den String "delphipraxis" codiere gibt es das gleiche Ergebnis... :|
Assarbad's MD5: 47f8a3c383d73373f3830ba72f02aad3
PHP: d41d8cd98f00b204e9800998ecf8427e Chris |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:01 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