AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Umwandlung von 4 Bytes in 1 LongWord (Stichwort MD5)

Umwandlung von 4 Bytes in 1 LongWord (Stichwort MD5)

Ein Thema von B3ta · begonnen am 9. Jan 2015 · letzter Beitrag vom 10. Jan 2015
Antwort Antwort
B3ta

Registriert seit: 21. Nov 2014
9 Beiträge
 
Delphi 7 Personal
 
#1

Umwandlung von 4 Bytes in 1 LongWord (Stichwort MD5)

  Alt 9. Jan 2015, 20:28
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

Lg B3ta
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 9. Jan 2015, 20:36
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).
Markus Kinzler
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.753 Beiträge
 
Delphi 10.4 Sydney
 
#3

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

  Alt 9. Jan 2015, 20:38
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
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.100 Beiträge
 
Delphi 12 Athens
 
#4

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

  Alt 9. Jan 2015, 20:45
oder mathematisch

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

oder binär

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

oder mit Pointer und casten

oder ...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
B3ta

Registriert seit: 21. Nov 2014
9 Beiträge
 
Delphi 7 Personal
 
#5

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

  Alt 9. Jan 2015, 20:56
oder mathematisch

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

oder binär

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
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

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

  Alt 9. Jan 2015, 21:00
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#7

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

  Alt 10. Jan 2015, 07:13
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.

Geändert von Dejan Vu (10. Jan 2015 um 07:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

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

  Alt 10. Jan 2015, 07:25
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

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

  Alt 10. Jan 2015, 08:58
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.


Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 17:38 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