| |
|
|
Jac de Lad | Kann mir jemand sagen ob und wie ich MD5-Checksummen von Speicherbereichen erstellen kann?
Jac |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 25.11.2005 ▲ |
|
|
|
|
Michael Wodrich | Erster Treffer bei Google:
Das Ganze sogar mit einem Pseudocode gewürzt. Dort steht message für den von Dir gewünschten Speicherblock.
Schöne Grüße Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 26.11.2005 ▲ |
|
|
|
|
Jac de Lad | Hm, ob ich das umsetzen kann...
Jac |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 27.11.2005 ▲ |
|
|
|
|
Jac de Lad | Ich kriegs irgendwie nicht hin, kann mir jemand helfen?
Jac |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 27.11.2005 ▲ |
|
|
|
|
Michael Wodrich | Ich habe mich bis zu LeftRotate vorgearbeitet. Anbei mein Code. Da müßte man dann mit Assembler nachhelfen.
Aber wenn sowieso Assembler: Vielleicht hilft uns Frank ja bei dieser Umsetzung (gefunden in einem Assembler-Source-Pool). Als Original-ZIP angefügt. KompilierenMarkierenSeparieren- hier ist alles in einem Hauptprogramm
(sollte in Unterprogramme eingeteilt werden)
- hier besteht die Nachricht immer aus 8-Bit langen Zeichen
(MD5 kann normalerweise jede Bitsequenz verarbeiten)
- hier ist der Message-Puffer auf 4K begrenzt
- Nachricht_Laenge ist normal 64-Bit (hier 32-Bit)
es fehlt die Funktion LeftRotate
(1. Parameter der Wert&, 2. Parameter die zu rotierenden Bits)
hier die Message, die verwurstet werden soll: (53 Zeichen = 424 Bit)
Puffer: 4K + 512 Bit = 4096 + 64 Bytes = 4160
Declare Nachricht$,Nachricht#,Nachricht_Laenge&,Nachricht_Chars%,Nachricht_Block%
Dim Nachricht#,4160
Nachricht$ = Die XProfan-Foren-Community find ich einfach toll...
Char Nachricht#,0 = Nachricht$
Def Floor(1) (!(1) - Int(!(1)))
Def bit_length(1) Len($(1)) * 8
MD5# ist der 128-Bit-Puffer = (4 * 32 Byte)
r&[64] hier als Bereich (läßt sich leichter initialisieren) (ebenso k&[64])
Declare MD5#, r#, k#
Struct MD5Struct = h0&, h1&, h2&, h3&
Dim MD5#, MD5Struct
Initialisiere die Variablen
MD5#.h0& = $67452301
MD5#.h1& = $EFCDAB89
MD5#.h2& = $98BADCFE
MD5#.h3& = $10325476
Definiere r wie folgt:
Dim r#, 256
Long r#, 0 = 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22
Long r#,16 = 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20
Long r#,32 = 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23
Long r#,48 = 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21
Dim k#, 256
Verwende den binären Nachkommateil vom Sinus von Integerwerten als Konstanten:
für alle i von 0 bis 63
WhileLoop 0,63
Long k#,&loop = Floor(abs(sin(&loop + 1)) * 2^32)
EndWhile
Vorbereitung der Nachricht Nachricht$:
Nachricht_Laenge& = bit_length(Nachricht$)
Nachricht_Chars% = Len(Nachricht$)
512 Bit (64 Byte) - 448 Bit (56 Byte) = 64 Bit (8 Byte)
erweitere message um bit 1
erweitere message um bits 0 bis Länge von message in bits ? 448 (mod 512)
- hier gemogelt: 1 + 7 Füllbits 0
Nachricht_Block% = Nachricht_Chars%
Byte Nachricht#,Nachricht_Block% = 1
Inc Nachricht_Block%
While (Nachricht_Block% mod 64) < 56
Byte Nachricht#,Nachricht_Block% = 0
Inc Nachricht_Block%
EndWhile
erweitere message um message_laenge als 64-Bit little-endian Integer
hier wird wieder gemogelt: 64-Bit Länge = obere 32-Bit auf Null, untere 32-Bit eintragen
Long Nachricht#,Nachricht_Block% = Nachricht_Laenge&
Long Nachricht#,Nachricht_Block%+4 = 0
Add Nachricht_Block%,8
Declare iBlock%,w&[16], i%, a&,b&,c&,d&, f&,g&, temp&
Bloecke% = Nachricht_Block% Div 64
Clear iBlock%
Verarbeite die Nachricht in aufeinander folgenden 512-Bit Blöcken:
für alle 512-Bit Block von message
Repeat
unterteile Block in 16 32-bit little-endian Worte w(i), 0 ? i ? 15
WhileLoop 0,15
w&[&loop] = Long(Nachricht#,iBlock% + &loop)
EndWhile
Initialisiere den Hash-Wert für diesen Block:
a& = MD5#.h0&
b& = MD5#.h1&
c& = MD5#.h2&
d& = MD5#.h3&
//Hauptschleife:
für alle i von 0 bis 63
Clear i%
Repeat
If (i% >= 0) and (i% <= 15)
f& = (b& and c&) or ((not b&) and d&)
g& = i%
ElseIf (i% >= 16) and (i% <= 31)
f& = (d& and b&) or ((not d&) and c&)
g& = (5 * i% + 1) mod 16
ElseIf (i% >= 32) and (i% <= 47)
f& = b& xor c& xor d&
g& = (3 * i% + 5) mod 16
ElseIf (i% >= 48) and (i% <= 63)
f& = c& xor (b& or (not d&))
g& = (7 * i%) mod 16
EndIf
temp& = d& : d& = c& : c& = b&
b& = LeftRotate((a& + f + Long(k#,i%) + w&[g&]), Long(r#,i%)) + b&
a& = temp&
Inc i%
Until i% >= 64
Addiere den Hash-Wert des Blocks zur Summe der vorherigen Hashes:
MD5#.h0& = MD5#.h0& + a&
MD5#.h1& = MD5#.h1& + b&
MD5#.h2& = MD5#.h2& + c&
MD5#.h3& = MD5#.h3& + d&
Add iBlock%,64
Until iBlock% >= Nachricht_Block%
den MD5# Bereich ausgeben oder sichern
.......
Speicher aufräumen
Dispose r#
Dispose k#
Dispose Nachricht#
Dispose MD5#
Schöne Grüße Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 30.11.2005 ▲ |
|
|
|
|
Jac de Lad | WOW! DANKE! Probier ich gleich aus. Ich hab immer Probleme solche Dinge wie in Wikipedia richtig umzusetzen.
Ein Hoch auf Michael!
Jac
PS: XPIA versorgt mein System immer mit ExceptionFaults, deshalb kann ich mit Assembler vorerst nix anfangen. Mal sehen ob das noch rigendwie wird... |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 01.12.2005 ▲ |
|
|
|
|
Jac de Lad | Nach der Freude kommt schnell die Ernüchterung. Weiß jemand, was LeftRotate darstellt?
Jac |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 01.12.2005 ▲ |
|
|
|
|
Frank Abbing | XPIA funktioniert nicht bei dir? |
|
|
| |
|
|
|
Jac de Lad | Hab ich dir doch schon mal geschrieben. Ich glaube aber das ist ein problem von MASM32.
Jac |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 01.12.2005 ▲ |
|
|
|
|
Melanie Brayer | MASM32 alternativen: TSAM, NASM, BIN86... es gibt noch mehr, aber dort kenne ich nicht die Details, sorry.
Eine weiter alternative: Ich schicke dir meine compalierten libs für den MASM32 oder du schaust mal auf MASMFORUM.COM, da haben auch einige das Problem... |
|
|
| mele (¯`·.¸¸.{ WinXP Pro, XProfan9, XPIA }.¸¸.·´¯)
<Bugs zählen ist besser als Schafe zählen, da der Computer nur so schlau ist wie der der Mensch der ihn bedient.> | 01.12.2005 ▲ |
|
|
|
|
Jac de Lad | Was genau meinst du mir compilierten Libs (Ich kenne mich mit Assembler nicht aus, wollte grad damit anfange, doch da hat mir dieser Exception Fault einen Strich durch die Rechnung gemacht, ich konnte nicht mal die Beispiele bei XPIA benutzen...)
Jac |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 02.12.2005 ▲ |
|
|
|
|
Jac de Lad | Hier, das passiert bei Franks Beispielen. (Immer, egal welches Beispiel...)
Jac |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 02.12.2005 ▲ |
|
|
|