AGB  ·  Datenschutz  ·  Impressum  







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

Big-Endian nach Little-Endian

Ein Thema von CalganX · begonnen am 5. Feb 2004 · letzter Beitrag vom 5. Mär 2004
Antwort Antwort
Seite 1 von 2  1 2      
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#1

Big-Endian nach Little-Endian

  Alt 5. Feb 2004, 21:08
Hi,
ich habe mir heute mal den MD5-Algorithmus angesehen, den Assarbad hier gepostet hat (MD5MD5). Nun habe ich das auch soweit mit seiner Hilfe hinbekommen einen String zu verschlüsseln.

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.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#2

Re: Big-Endian nach Little-Endian

  Alt 6. Feb 2004, 01:52
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
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#3

Re: Big-Endian nach Little-Endian

  Alt 6. Feb 2004, 01:59
mal ne dumme frage, was ist denn big/little-endian?
Mario
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Big-Endian nach Little-Endian

  Alt 6. Feb 2004, 06:41
Hi,
@PN: Guckst du hier...

@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:
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;
dann 47f8a3c383d73373f3830ba72f02aad3 ausgibt, woran das liegen kann!? ...

Chris
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#5

Re: Big-Endian nach Little-Endian

  Alt 6. Feb 2004, 17:59
Zitat:
wenn PHP mir bei einem beliebigen String mit md5() den Wert d41d8cd98f00b204e9800998ecf8427e ausgibt
Wenn PHP bei einem BELIEBIGEN String immer das gleiche Resultat ausgibt dann würde ich sagen das entweder PHP Shit ist oder du nicht richtig PHP gecodet hast.

Gruß Hagen
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#6

Re: Big-Endian nach Little-Endian

  Alt 6. Feb 2004, 18:05
Also bei mir funktioniert das in PHP problemlose. Da kommt immer was verschiedenes raus (außer man verschlüsselt den gleichen String...)
Alexander
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Big-Endian nach Little-Endian

  Alt 6. Feb 2004, 18:11
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? ).

Chris
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#8

Re: Big-Endian nach Little-Endian

  Alt 6. Feb 2004, 19:36
Zitat von Pseudemys Nelsoni:
mal ne dumme frage, was ist denn big/little-endian?
Little Endian ist die Angewohnheit von bestimmten Prozessoren (u.a. x86) die Bytes verkehrt herum im Speicher abzulegen ("Least significant byte first"). Beispiel: Ein Word hat den Wert 48849, was hexadezimal BE:EF wäre. Im Speicher steht jedoch EF:BE.

Zitat von Chakotay1308:
Das Problem ist einfach, dass der "Delphi"-MD5-Hash länger ist (und anders), als das PHP-Derivat (sagt man das so? ).
Länger? Beides 16 Byte, wenn ich noch richtig zählen kann. Was die Endianess angeht: Assarbad schreibt doch, dass er den Algorihmus in RFC 1321 übersetzt hat. In eben diesem RFC heißt es:

Zitat von RFC 1321:
The implementation is portable and should work on many different
plaforms. However, it is not difficult to optimize the implementation
on particular platforms, an exercise left to the reader. For example,
on "little-endian" platforms where the lowest-addressed byte in a 32-
bit word is the least significant and there are no alignment
restrictions, the call to Decode in MD5Transform can be replaced with
a typecast.
An der Endianess kann es also nicht liegen, wenn ich das richtig sehe.
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#9

Re: Big-Endian nach Little-Endian

  Alt 7. Feb 2004, 01:12
Zitat:
Little Endian ist die Angewohnheit von bestimmten Prozessoren (u.a. x86) die Bytes verkehrt herum im Speicher abzulegen ("Least significant byte first"). Beispiel: Ein Word hat den Wert 48849, was hexadezimal BE:EF wäre. Im Speicher steht jedoch EF:BE.
Hm

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:
Zelle 0   1   2   3

      $12 $23 $45  $67
Wir wollen in die obige Zahl lesen,

Code:
 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
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.


@Chakotay1308, poste mal zwei Beispiele, jeweils PHP und Assarbad's MD5.

Gruß Hagen
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Big-Endian nach Little-Endian

  Alt 7. Feb 2004, 09:38
Hi,
also... hier die jeweiligen Ausgaben des Strings "mirt459":
Code:
Assarbad's MD5: 47f8a3c383d73373f3830ba72f02aad3
PHP:           d41d8cd98f00b204e9800998ecf8427e
Komisch ist jedoch, wenn ich bspw. den String "delphipraxis" codiere gibt es das gleiche Ergebnis...

Chris
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:04 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