Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi MD5 Länge einfügen als 64 Bit? (https://www.delphipraxis.net/129804-md5-laenge-einfuegen-als-64-bit.html)

fortuneNext 25. Feb 2009 23:54


MD5 Länge einfügen als 64 Bit?
 
Hallo ;-)
Aktuell probiere ich mal, MD5 in Delphi einzubauen. Da es nicht sonderlich performant sein muss, habe ich mir dazu mal wieder den Wikipedia-Pseudoquellcode angeguckt und versuche den jetzt in Delphi umzusetzen. Bei einem Stück bleibe ich jedoch hängen:


Zitat:

erweitere message um bits "0" bis Länge von message in bits ≡ 448 (mod 512)
erweitere message um message_laenge als 64-Bit little-endian Integer
1. Wie finde ich denn die Länge IN BITS heraus?

2. Evtl. erschließt sich die Antwort schon aus der Antwort zu 1. ansonsten:
Soll die Länge als Int64 gespeichert werden?
Aber angenommen die Länge beträgt 4 - dann wird eine 4 an den String drangehangen. Aber das eine Zeichen wird doch nicht reichen, aus den 448 Bit 512-Bit zu machen? Wahrscheinlich verstehe ich vollkommen falsch was gemeint ist.

Wäre dankbar für ein bischen Hilfe :)

mfg
fortuneNext

Dax 26. Feb 2009 00:10

Re: MD5 Länge einfügen als 64 Bit?
 
Zitat:

Zitat von fortuneNext
1. Wie finde ich denn die Länge IN BITS heraus?

:shock: Ein Byte hat acht Bit!


Zitat:

Zitat von fortuneNext
2. Evtl. erschließt sich die Antwort schon aus der Antwort zu 1. ansonsten:
Soll die Länge als Int64 gespeichert werden?
Aber angenommen die Länge beträgt 4 - dann wird eine 4 an den String drangehangen. Aber das eine Zeichen wird doch nicht reichen, aus den 448 Bit 512-Bit zu machen? Wahrscheinlich verstehe ich vollkommen falsch was gemeint ist.

Du sollst die Länge als 64 Bit LE-Int anhängen, nicht als String :gruebel:

omata 26. Feb 2009 00:11

Re: MD5 Länge einfügen als 64 Bit?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Was spricht gegen eine fertige Unit?

Edit: Vielleicht hilft dir ja folgendes weiter...
Delphi-Quellcode:
function ZustandZuBits(Anzahl:integer):integer;
var bits:real;
begin
  bits:=ln(Anzahl) / ln(2);
  Result:=trunc(bits);
  if Result < bits then
    inc(Result);
end;

fortuneNext 26. Feb 2009 06:26

Re: MD5 Länge einfügen als 64 Bit?
 
Zitat:

:Shocked: Ein Byte hat acht Bit!
Okay, also doch so einfach, Länge * 8?
Danke :D Dachte das wäre schwieriger ;)

Zitat:

Du sollst die Länge als 64 Bit LE-Int anhängen, nicht als String Grübelnd...
Und wie mache ich das? :angel:

Zitat:

Was spricht gegen eine fertige Unit?
Dass ich das blos zur Übung und zum Verständnis des Algorithmus mache - da würde eine Fertigunit glaube ich nicht sonderlich weiterhelfen...


Zitat:

Delphi-Quellcode:
function ZustandZuBits(Anzahl:integer):integer;
var bits:real;
begin
  bits:=ln(Anzahl) / ln(2);
  Result:=trunc(bits);
  if Result < bits then
    inc(Result);
end;

Das werd ich mal probieren, danke :)

fortuneNext 27. Feb 2009 15:20

Re: MD5 Länge einfügen als 64 Bit?
 
Gut gut, das mit den Bits und Bytes hab ich nun verstanden und funktioniert :D
Aber wie hänge ich jetzt die Länge als 64-Bit-LE-Int an?

himitsu 27. Feb 2009 15:33

Re: MD5 Länge einfügen als 64 Bit?
 
Indem du die Längen-Variable nimmst und binär hinten dranrechnest.

Wie du das genau bei dir machen mußt wissen wir nicht, da wir nicht wissen wie dein Code aussieht.

generic 27. Feb 2009 20:20

Re: MD5 Länge einfügen als 64 Bit?
 
Wie kommt ihr eigentlich auf 64bit?
Der MD5 braucht 128bit.

himitsu 27. Feb 2009 22:46

Re: MD5 Länge einfügen als 64 Bit?
 
64 > Int64 > die Länge der in dem MD5 verechneten Daten.

128 > der MD5-Wert

fortuneNext 28. Feb 2009 23:43

Re: MD5 Länge einfügen als 64 Bit?
 
Zitat:

Zitat von himitsu
Indem du die Längen-Variable nimmst und binär hinten dranrechnest.

Wie du das genau bei dir machen mußt wissen wir nicht, da wir nicht wissen wie dein Code aussieht.

Das war das Stichwort, das ich gesucht habe! Danke :D

himitsu 1. Mär 2009 11:43

Re: MD5 Länge einfügen als 64 Bit?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wie sieht es denn bei dir inzwischen aus? (deine Code-Übersetzung)

hatte es selbst grad mal versucht und dachte erst ":shock: des rechnet doch falsch", verglichen mit einem der PHP-MD5-Generatoren im INet ...

Doch hatte ganz vergessen, daß Windows nicht Big-Endian ist, sondern Little-Endian und man daher das Ergebnis umdrehn muß, da die MD5-Strings in Big-Endian ausgegeben werden.
IntToHex, sowie Format+%x machen es zumindestens so ... man könnte aber auch BinToHex nutzen, dieses arbeitet "andersrum".

(mein Funktions-Rumpf und die Umwandlung von h0-h1-h2-h3 nach String, damit du dich in Ruhe auf die Berechnung konzentrieren kannst und nicht daran scheiterst, nur weil es falsch dargestellt wird)
Delphi-Quellcode:
Function MD5(message: AnsiString): AnsiString;
  Begin
    ...

    //var int digest := h0 append h1 append h2 append h3 //(Darstellung als little-endian)
    Result := Format('$%.2x%.2x%.2x%.2x %.2x%.2x%.2x%.2x %.2x%.2x%.2x%.2x %.2x%.2x%.2x%.2x',
      [h0 shr 0 and $ff, h0 shr 8 and $ff, h0 shr 16 and $ff, h0 shr 24 and $ff,
       h1 shr 0 and $ff, h1 shr 8 and $ff, h1 shr 16 and $ff, h1 shr 24 and $ff,
       h2 shr 0 and $ff, h2 shr 8 and $ff, h2 shr 16 and $ff, h2 shr 24 and $ff,
       h3 shr 0 and $ff, h3 shr 8 and $ff, h3 shr 16 and $ff, h3 shr 24 and $ff]);
  End;
nicht wundern ... String = AnsiString ... aber damit man es auch unter Delphi2009 testen kann, da dieses Unicode ist.


Da du ja lernen willst, würde ich dir allerdings empfehlen es dir erst anzugucken, wenn du es selbst geschafft hast, oder du nicht weiter kommst.
Aber bei Letzerem kannst'e uns ja gern fragen ... das Beispiel in Wikipedia geht also schonmal, daran kann's nicht scheitern :angel:

[add]
Der Code entspricht weitgehenst dem Aufbau von Wiki's Code-Vorlage und enthält keinerlei Optimierungen ... Optimierteres findet man z.B. in meiner "Klasse" Hier im Forum suchenThxMD5


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:11 Uhr.
Seite 1 von 3  1 23      

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