Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Umwandlung von 4 Bytes in 1 LongWord (Stichwort MD5) (https://www.delphipraxis.net/183447-umwandlung-von-4-bytes-1-longword-stichwort-md5.html)

B3ta 9. Jan 2015 20:28

Umwandlung von 4 Bytes in 1 LongWord (Stichwort MD5)
 
Hallo zusammen,

Weil der Titel unter Umständen etwas irreführend sein könnte, ich aber nicht wusste, wie ich mein Problem besser beschreiben sollte hier noch einmal eine kurze Zusammenfassung:
Für ein Schulprojekt arbeite ich im Moment an einem Algorithmus für das MD5 Verfahren. Da dieser ja hauptsächlich über 32Bit integers(also LongWord) funktioniert, war meine Idee, meinen Ausgangstext in Teilen von jeweils 4 Chars zu betrachten, da jeder dieser Chars ja einen Wert von 1 Byte hat.

Jetzt zu meiner Frage: Gibt es eine Möglichkeit, dass ich diese 4 bytes quasi "aneinanderreihe" und daraus dann ein LongWord mache oder muss ich die Chars tatsächlich erst als Bitfolgen darstellen und diese aneinanderreihen um das gewünschte Ergebnis zu erzielen?

Falls das hier im falschen Forum aufgehoben ist, bitte verschieben, ich bin neu hier :P

Lg B3ta

mkinzler 9. Jan 2015 20:36

AW: Umwandlung von 4 Bytes in 1 LongWord (Stichwort MD5)
 
Zitat:

da jeder dieser Chars ja einen Wert von 1 Byte hat.
Aber nur bei AnsiStrings. Bei Unicode sind es 2 Byte pro Zeichen.

Im Speicher sind alles schon Bits auch Chars sind Bitfolgen. Was das Programm dann sieht ist Interpretationssache. ( Der dezimale Wert von 65 kann auch A sein).

Klaus01 9. Jan 2015 20:38

AW: Umwandlung von 4 Bytes in 1 LongWord (Stichwort MD5)
 
das könnte im Prinzip damit funktionieren
Delphi-Quellcode:
type
   TFoo = packed record
     case Boolean of
       true: (ByteArray: Array[0..3] of Byte);
       false: (lword: LongWord);
   end;
Grüße
Klaus

himitsu 9. Jan 2015 20:45

AW: Umwandlung von 4 Bytes in 1 LongWord (Stichwort MD5)
 
oder mathematisch

Delphi-Quellcode:
MeinInteger := Ord(Buchstabe1) + Ord(Buchstabe2) * 256 + Ord(Buchstabe3) * 65536 + Ord(Buchstabe4) * 16777216;


oder binär

Delphi-Quellcode:
MeinInteger := Ord(Buchstabe1) or Ord(Buchstabe2) shl 8 or Ord(Buchstabe3) shl 16 or Ord(Buchstabe4) shl 24;


oder mit Pointer und casten

oder ...

B3ta 9. Jan 2015 20:56

AW: Umwandlung von 4 Bytes in 1 LongWord (Stichwort MD5)
 
Zitat:

Zitat von himitsu (Beitrag 1286106)
oder mathematisch

Delphi-Quellcode:
MeinInteger := Ord(Buchstabe1) + Ord(Buchstabe2) * 256 + Ord(Buchstabe3) * 65536 + Ord(Buchstabe4) * 16777216;


oder binär

Delphi-Quellcode:
MeinInteger := Ord(Buchstabe1) or Ord(Buchstabe2) shl 8 or Ord(Buchstabe3) shl 16 or Ord(Buchstabe4) shl 24;


oder mit Pointer und casten

oder ...

Danke, so eine Mathematische Umsetzung habe ich gesucht!
Allerdings kurze Anmerkung, Müsste man nicht Mit Buchstabe 4 anfangen und dann am ende Buchstabe1 mit 16777216 multiplizieren, weil der ja (okay, das ist zugegebenermaßen ansichtssache) am weitesten Links steht?

Lg. B3ta

Sir Rufo 9. Jan 2015 21:00

AW: Umwandlung von 4 Bytes in 1 LongWord (Stichwort MD5)
 
Ein Hash wird ausschliesslich aus einer Bytefolge erstellt. Aus einem String niemals. Darum muss der String erst in eine Bytefolge übertragen werden und dann kann daraus der Hash gebildet werden.

Das ist übrigens ein sehr beliebter Fehler und eine sehr häufig gestellte Frage wenn es um Delphi/PHP und verschlüsselte/gehashte Strings geht, denn da passen die Hash-Werte nicht. Logisch, denn bei PHP hat man idR UTF8 Strings und mit Delphi ANSI oder UTF16 Strings. Kaum verwendet man auf beiden Seiten die gleiche Kodierung klappt es auch mit den Hash-Werten.

Dejan Vu 10. Jan 2015 07:13

AW: Umwandlung von 4 Bytes in 1 LongWord (Stichwort MD5)
 
Zitat:

Zitat von Sir Rufo (Beitrag 1286108)
Ein Hash wird ausschliesslich aus einer Bytefolge erstellt. Aus einem String niemals. Darum muss der String erst in eine Bytefolge übertragen werden und dann kann daraus der Hash gebildet werden.

Besser (bzw. zur Klarstellung für Andere): 'Darum muss der String als Bytefolge interpretiert werden'. Übertragen werden muss hier nichts.

Sir Rufo 10. Jan 2015 07:25

AW: Umwandlung von 4 Bytes in 1 LongWord (Stichwort MD5)
 
Zitat:

Zitat von Dejan Vu (Beitrag 1286117)
Zitat:

Zitat von Sir Rufo (Beitrag 1286108)
Ein Hash wird ausschliesslich aus einer Bytefolge erstellt. Aus einem String niemals. Darum muss der String erst in eine Bytefolge übertragen werden und dann kann daraus der Hash gebildet werden.

Besser (bzw. zur Klarstellung für Andere): 'Darum muss der String als Bytefolge interpretiert werden'. Übertragen werden muss hier nichts.

Die Frage ist doch wer interpretiert was, bzw. was ist die Interpretation?

Ist der String eine Interpretation einer Bytefolge oder die Bytefolge eine Interpretation eines Strings?

Da der Rechner nur Bytes und Bytefolgen verarbeitet ist wohl der Rest immer eine Interpretation einer Bytefolge. Genauso wie eine Textdatei nur aus einer Bytefolge besteht, die erst mit dem Wissen der Kodierung wieder als Text interpretiert werden kann.

Übertragen werden muss es deshalb, weil aus ein und demselben String die unterschiedlichsten Bytefolgen erstellt werden können, abhängig von der Kodierung.

p80286 10. Jan 2015 08:58

AW: Umwandlung von 4 Bytes in 1 LongWord (Stichwort MD5)
 
Zitat:

Zitat von Sir Rufo (Beitrag 1286119)
Zitat:

Zitat von Dejan Vu (Beitrag 1286117)
Zitat:

Zitat von Sir Rufo (Beitrag 1286108)
Ein Hash wird ausschliesslich aus einer Bytefolge erstellt. Aus einem String niemals. Darum muss der String erst in eine Bytefolge übertragen werden und dann kann daraus der Hash gebildet werden.

Besser (bzw. zur Klarstellung für Andere): 'Darum muss der String als Bytefolge interpretiert werden'. Übertragen werden muss hier nichts.

Die Frage ist doch wer interpretiert was, bzw. was ist die Interpretation?

Ist der String eine Interpretation einer Bytefolge oder die Bytefolge eine Interpretation eines Strings?

Da der Rechner nur Bytes und Bytefolgen verarbeitet ist wohl der Rest immer eine Interpretation einer Bytefolge. Genauso wie eine Textdatei nur aus einer Bytefolge besteht, die erst mit dem Wissen der Kodierung wieder als Text interpretiert werden kann.

Übertragen werden muss es deshalb, weil aus ein und demselben String die unterschiedlichsten Bytefolgen erstellt werden können, abhängig von der Kodierung.

:thumb: :thumb:

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:01 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