Hallo,
ich habe es mir zum Ziel gesetzt für eine Arbeit für die Schule MD5 selbst zu implementieren, komme aber nur auf falsche Ergebnisse für die Funktion.
Hier ist mein Code: https://gist.github.com/anonymous/bdae8b7d60b8e31654ee, welcher auf dem Pseudocode aus dem Wikipedia-Artikel zu MD5 basiert. Hier die Spezifikation von MD5: https://www.ietf.org/rfc/rfc1321.txt
Die Konstanten sollten alle stimmen, das Padding sowie Aufteilen der Nachricht in 32 bit Blocks auch.
Ich denke daher, dass mein Fehler irgendwo in der forschleife zum Rotieren der Kettenvariablen ist. Außerdem denke ich, dass die Ausgabe aufgrund der Byteorder falsch ist bzw dass irgendwas mit den Byteordern generell nicht stimmt. Falls mir jemand dazu verhelfen könnte, zu einem richtigen MD5 Hash zu kommen wäre ich sehr dankbar.
Da die Werte der Kettenvariablen am Ende nicht stimmen, gebe ich noch keinen Wert zurück.
Falsches Ergebnis in MD5 Hashfunktion
- miracle173
- User
- Beiträge: 127
- Registriert: Samstag 6. Februar 2016, 00:28
Das zu analysieren ist eine etwas langweilige Sache. Das Problem ist auch, dass du nicht weißt, ob der Pseudocode , den du nachprogrammierst, fehlerfrei ist. Besser ist es also, sich an das Original(RFC1321 zu halten. In RFC1321 findet man auch eine Beispielimplementation des Algorithmus in C. Du könntest nun also so vorgehen, dass du an bestimmten stellen deines programms du dir Teilergebnisse ausgeben lässt und bei der C-Implementation an den entsprechenden Stellen dir die selben Werte ausgeben lässt und dann vergleicht. So lässt sich der Fehler ziemlich schnell eingrenzen.
Ich habe nun die Dateien aus dem RCF1321 herausgezogen und mit dem RCF1321 in github hinterlegt. Leider muss ich da irgend eine Fehler gemacht haben, Da das resultierende Programm leider nicht den im RFC1321 bechsiebenen Selbsttest besteht. Vielleicht kann ich die Files demnächst noch einmal überprüfen.
Ich habe nun die Dateien aus dem RCF1321 herausgezogen und mit dem RCF1321 in github hinterlegt. Leider muss ich da irgend eine Fehler gemacht haben, Da das resultierende Programm leider nicht den im RFC1321 bechsiebenen Selbsttest besteht. Vielleicht kann ich die Files demnächst noch einmal überprüfen.
mfg miracle173
https://github.com/python-forum-de/Jump-N-Run-pydesw
https://github.com/python-forum-de/Jump-N-Run-pydesw
- miracle173
- User
- Beiträge: 127
- Registriert: Samstag 6. Februar 2016, 00:28
Ich habe nun eine funktionierende MD5-Implementation gefunden, und zwar auf Sourceforge. Mit ihr kann man veruhen, die Fehler zu finden.
mfg miracle173
https://github.com/python-forum-de/Jump-N-Run-pydesw
https://github.com/python-forum-de/Jump-N-Run-pydesw
- miracle173
- User
- Beiträge: 127
- Registriert: Samstag 6. Februar 2016, 00:28
Ich habe versehentlich einen Fehler in deinem Code gefunden:
Der Pseudocode in der Wikipedia lautet
Dein Phyton-Code lautet so:
Man erkennt, die Einrückung ist unterschiedlich. Der letzte 4 Zeilen Block ist bei deinem Code in der inneren for-Schleife,
während er beim Wikicode in der äußeren for-Schleife liegt.
Der Pseudocode in der Wikipedia lautet
Code: Alles auswählen
...
für alle 512-Bit Block von message
...
// Hauptschleife:
für alle i von 0 bis 63
...
temp := D
D := C
C := B
B := B + linksrotation((A + F + K[i] + M[g]), s[i])
A := temp
// Addiere den Hash-Wert des Blocks zur Summe der vorherigen Hashes:
a0 := a0 + A
b0 := b0 + B
c0 := c0 + C
d0 := d0 + D
Code: Alles auswählen
...
for M in bits.cut(512):
...
for i in range(0,64):
---
temp = D
D = C
C = B
rotate = (A + F + K[i] + split_block[g].uintle)
B = (B + left_rotate(rotate,s[i]))%mod
A = temp
a0 = (a0 + A)%mod
b0 = (b0 + B)%mod
c0 = (c0 + C)%mod
d0 = (d0 + D)%mod
während er beim Wikicode in der äußeren for-Schleife liegt.
mfg miracle173
https://github.com/python-forum-de/Jump-N-Run-pydesw
https://github.com/python-forum-de/Jump-N-Run-pydesw
- miracle173
- User
- Beiträge: 127
- Registriert: Samstag 6. Februar 2016, 00:28
Ich habe inzwischen den Feher im Code in RFC1321 gefunden. In der Datei global.h ist definiert
Allerdings ist bei mir sizeof(unsigned long int)=8, also 8 Bytes. Mann muss dann
setzen, und alles funktioniert.
Man kann sich dann Daten erzeugen zur Fehlersuche bei deinem Pythonprogramm.
So habe ich es auch gemacht, um die den Fehler im RFC1321-Programm zu finden. Die Daten habe ich mit dem schon erwähnten Programm von L Peter Deutsch auf Sourcforge.net erzeugt. Um dies zu erreichen sind allerdings bei diesem Programm wesentlich mehr Änderungen durchzuführen als im Programm von Ron Rivest in RCF1321.
Code: Alles auswählen
/* UINT4 defines a four byte word */
typedef unsigned long int UINT4;
Code: Alles auswählen
/* UINT4 defines a four byte word */
typedef unsigned int UINT4;
Man kann sich dann Daten erzeugen zur Fehlersuche bei deinem Pythonprogramm.
So habe ich es auch gemacht, um die den Fehler im RFC1321-Programm zu finden. Die Daten habe ich mit dem schon erwähnten Programm von L Peter Deutsch auf Sourcforge.net erzeugt. Um dies zu erreichen sind allerdings bei diesem Programm wesentlich mehr Änderungen durchzuführen als im Programm von Ron Rivest in RCF1321.
mfg miracle173
https://github.com/python-forum-de/Jump-N-Run-pydesw
https://github.com/python-forum-de/Jump-N-Run-pydesw
- miracle173
- User
- Beiträge: 127
- Registriert: Samstag 6. Februar 2016, 00:28
Falls du noch weitere Fehler hast, hilft dir vielleicht folgendes. Ich habe bei einer funktionierenden Implementierung ein Tracing eingebaut, d.h. Ich lasse
die berechneten Werte ausgeben. Unten habe ich dokumebntiert, wo diese Ausgaben (Auruf der Funktion trace) im Pseudocode stehen würden.
gibt dabei
aus. step gibt also die Position im Code an, a,b,c,d sind die hexadezimalen Werte der Variablen,
count ist ein Zähler, der bei jedem Aufruf von trace[/ti] hochgezählt wird.
round wird jedesmal hochgezählt, wenn step den Wert 1 annimmt, zählt also die Wiederholungen durch die äusseren Schleife.
Wenn du noch Fehler hast kannst du ein Funktion trace in deinenCode einbauen und die Ausgabe vergleichen.
Damit kannst du den Bereich, wo der Fehler ist, vermutlich schnell einengen.
die berechneten Werte ausgeben. Unten habe ich dokumebntiert, wo diese Ausgaben (Auruf der Funktion trace) im Pseudocode stehen würden.
Code: Alles auswählen
trace(step,a,b,c,d)
Code: Alles auswählen
count round step a b c d
count ist ein Zähler, der bei jedem Aufruf von trace[/ti] hochgezählt wird.
round wird jedesmal hochgezählt, wenn step den Wert 1 annimmt, zählt also die Wiederholungen durch die äusseren Schleife.
Wenn du noch Fehler hast kannst du ein Funktion trace in deinenCode einbauen und die Ausgabe vergleichen.
Damit kannst du den Bereich, wo der Fehler ist, vermutlich schnell einengen.
Code: Alles auswählen
// Initialisiere die Variablen: (lt. RFC 1321)
var uint a0 := 0x67452301
var uint b0 := 0xEFCDAB89
var uint c0 := 0x98BADCFE
var uint d0 := 0x10325476
trace(0,a0,b0,c0,d0)
...
für alle 512-Bit Block von message
...
// Hauptschleife:
für alle i von 0 bis 63
...
temp := D
D := C
C := B
B := B + linksrotation((A + F + K[i] + M[g]), s[i])
A := temp
trace(i+1,A,B,C,D)
// Addiere den Hash-Wert des Blocks zur Summe der vorherigen Hashes:
a0 := a0 + A
b0 := b0 + B
c0 := c0 + C
d0 := d0 + D
trace(65,a0,b0,c0,d0)
Code: Alles auswählen
$ ./mymd5 -s
1 0 0 0x67452301 0xefcdab89 0x98badcfe 0x10325476
2 1 1 0xa5202774 0xefcdab89 0x98badcfe 0x10325476
3 1 2 0xa5202774 0xefcdab89 0x98badcfe 0xf59592dd
4 1 3 0xa5202774 0xefcdab89 0xe7f06b23 0xf59592dd
5 1 4 0xa5202774 0x1b163203 0xe7f06b23 0xf59592dd
6 1 5 0x32033344 0x1b163203 0xe7f06b23 0xf59592dd
7 1 6 0x32033344 0x1b163203 0xe7f06b23 0x2f35d494
8 1 7 0x32033344 0x1b163203 0xf5b158db 0x2f35d494
9 1 8 0x32033344 0x9bc13ce9 0xf5b158db 0x2f35d494
10 1 9 0x3893b991 0x9bc13ce9 0xf5b158db 0x2f35d494
11 1 10 0x3893b991 0x9bc13ce9 0xf5b158db 0xfce4a312
12 1 11 0x3893b991 0x9bc13ce9 0xe1ef0576 0xfce4a312
13 1 12 0x3893b991 0x70768a29 0xe1ef0576 0xfce4a312
14 1 13 0xf56c7cf1 0x70768a29 0xe1ef0576 0xfce4a312
15 1 14 0xf56c7cf1 0x70768a29 0xe1ef0576 0x374943a7
16 1 15 0xf56c7cf1 0x70768a29 0x5aa53f75 0x374943a7
17 1 16 0xf56c7cf1 0xd6819c6a 0x5aa53f75 0x374943a7
18 1 17 0x1c7d7513 0xd6819c6a 0x5aa53f75 0x374943a7
19 1 18 0x1c7d7513 0xd6819c6a 0x5aa53f75 0x7bd57a3a
20 1 19 0x1c7d7513 0xd6819c6a 0xc095f13a 0x7bd57a3a
21 1 20 0x1c7d7513 0xbd782e17 0xc095f13a 0x7bd57a3a
22 1 21 0x3d1e3e6c 0xbd782e17 0xc095f13a 0x7bd57a3a
23 1 22 0x3d1e3e6c 0xbd782e17 0xc095f13a 0x68b7b3e3
24 1 23 0x3d1e3e6c 0xbd782e17 0xeb41643e 0x68b7b3e3
25 1 24 0x3d1e3e6c 0xe422531a 0xeb41643e 0x68b7b3e3
26 1 25 0x306ec122 0xe422531a 0xeb41643e 0x68b7b3e3
27 1 26 0x306ec122 0xe422531a 0xeb41643e 0xd28c77c2
28 1 27 0x306ec122 0xe422531a 0xa3c663da 0xd28c77c2
29 1 28 0x306ec122 0xa0572807 0xa3c663da 0xd28c77c2
30 1 29 0x13707036 0xa0572807 0xa3c663da 0xd28c77c2
31 1 30 0x13707036 0xa0572807 0xa3c663da 0xae7813db
32 1 31 0x13707036 0xa0572807 0x1c31c384 0xae7813db
33 1 32 0x13707036 0xa2205f1f 0x1c31c384 0xae7813db
34 1 33 0xdf63eaa1 0xa2205f1f 0x1c31c384 0xae7813db
35 1 34 0xdf63eaa1 0xa2205f1f 0x1c31c384 0xc3689f5b
36 1 35 0xdf63eaa1 0xa2205f1f 0x12f3e755 0xc3689f5b
37 1 36 0xdf63eaa1 0x004b6669 0x12f3e755 0xc3689f5b
38 1 37 0x5f7a9b2e 0x004b6669 0x12f3e755 0xc3689f5b
39 1 38 0x5f7a9b2e 0x004b6669 0x12f3e755 0xabc34e16
40 1 39 0x5f7a9b2e 0x004b6669 0x91ca4cb7 0xabc34e16
41 1 40 0x5f7a9b2e 0xc5dc8c15 0x91ca4cb7 0xabc34e16
42 1 41 0x4497169d 0xc5dc8c15 0x91ca4cb7 0xabc34e16
43 1 42 0x4497169d 0xc5dc8c15 0x91ca4cb7 0x76fd93d4
44 1 43 0x4497169d 0xc5dc8c15 0xfd95f243 0x76fd93d4
45 1 44 0x4497169d 0x0fe32453 0xfd95f243 0x76fd93d4
46 1 45 0x3f55edfd 0x0fe32453 0xfd95f243 0x76fd93d4
47 1 46 0x3f55edfd 0x0fe32453 0xfd95f243 0x22a31f54
48 1 47 0x3f55edfd 0x0fe32453 0x68d84ea2 0x22a31f54
49 1 48 0x3f55edfd 0xca7d2dbd 0x68d84ea2 0x22a31f54
50 1 49 0x93aa2577 0xca7d2dbd 0x68d84ea2 0x22a31f54
51 1 50 0x93aa2577 0xca7d2dbd 0x68d84ea2 0x1688dc85
52 1 51 0x93aa2577 0xca7d2dbd 0xcd85b8cb 0x1688dc85
53 1 52 0x93aa2577 0x561e0689 0xcd85b8cb 0x1688dc85
54 1 53 0x5625a114 0x561e0689 0xcd85b8cb 0x1688dc85
55 1 54 0x5625a114 0x561e0689 0xcd85b8cb 0x3450f42b
56 1 55 0x5625a114 0x561e0689 0x392ad0d0 0x3450f42b
57 1 56 0x5625a114 0x1e77fa61 0x392ad0d0 0x3450f42b
58 1 57 0x474a9c8c 0x1e77fa61 0x392ad0d0 0x3450f42b
59 1 58 0x474a9c8c 0x1e77fa61 0x392ad0d0 0xdfce00bc
60 1 59 0x474a9c8c 0x1e77fa61 0x36594b14 0xdfce00bc
61 1 60 0x474a9c8c 0x30130182 0x36594b14 0xdfce00bc
62 1 61 0x7246fad3 0x30130182 0x36594b14 0xdfce00bc
63 1 62 0x7246fad3 0x30130182 0x36594b14 0x6e10a476
64 1 63 0x7246fad3 0x30130182 0xff4ea3eb 0x6e10a476
65 1 64 0x7246fad3 0x14e45506 0xff4ea3eb 0x6e10a476
66 1 65 0xd98c1dd4 0x04b2008f 0x980980e9 0x7e42f8ec
MD5 ("") = d41d8cd98f00b204e9800998ecf8427e
$ ./mymd5 -s"abcdefghijklmnopqrstuvwxyz"
1 0 0 0x67452301 0xefcdab89 0x98badcfe 0x10325476
2 1 1 0xd6d117a6 0xefcdab89 0x98badcfe 0x10325476
3 1 2 0xd6d117a6 0xefcdab89 0x98badcfe 0xaab1aaaa
4 1 3 0xd6d117a6 0xefcdab89 0x227d8cf1 0xaab1aaaa
5 1 4 0xd6d117a6 0x4503b812 0x227d8cf1 0xaab1aaaa
6 1 5 0xfe15f787 0x4503b812 0x227d8cf1 0xaab1aaaa
7 1 6 0xfe15f787 0x4503b812 0x227d8cf1 0xa811b278
8 1 7 0xfe15f787 0x4503b812 0xb71122fc 0xa811b278
9 1 8 0xfe15f787 0xda9bbb0d 0xb71122fc 0xa811b278
10 1 9 0xae752899 0xda9bbb0d 0xb71122fc 0xa811b278
11 1 10 0xae752899 0xda9bbb0d 0xb71122fc 0x2bbe757f
12 1 11 0xae752899 0xda9bbb0d 0x7d4bd80b 0x2bbe757f
13 1 12 0xae752899 0x56cfa5cb 0x7d4bd80b 0x2bbe757f
14 1 13 0x1754a316 0x56cfa5cb 0x7d4bd80b 0x2bbe757f
15 1 14 0x1754a316 0x56cfa5cb 0x7d4bd80b 0x85567d90
16 1 15 0x1754a316 0x56cfa5cb 0x00df74d5 0x85567d90
17 1 16 0x1754a316 0x608d6b7e 0x00df74d5 0x85567d90
18 1 17 0x2d8071cc 0x608d6b7e 0x00df74d5 0x85567d90
19 1 18 0x2d8071cc 0x608d6b7e 0x00df74d5 0x5dcee119
20 1 19 0x2d8071cc 0x608d6b7e 0xedfe7e4b 0x5dcee119
21 1 20 0x2d8071cc 0x4c2145b3 0xedfe7e4b 0x5dcee119
22 1 21 0x570c43e0 0x4c2145b3 0xedfe7e4b 0x5dcee119
23 1 22 0x570c43e0 0x4c2145b3 0xedfe7e4b 0x977efd2a
24 1 23 0x570c43e0 0x4c2145b3 0xc28ab49d 0x977efd2a
25 1 24 0x570c43e0 0xc9f162d4 0xc28ab49d 0x977efd2a
26 1 25 0x25bfae3b 0xc9f162d4 0xc28ab49d 0x977efd2a
27 1 26 0x25bfae3b 0xc9f162d4 0xc28ab49d 0x89980104
28 1 27 0x25bfae3b 0xc9f162d4 0xf8c8365f 0x89980104
29 1 28 0x25bfae3b 0xe6d3b398 0xf8c8365f 0x89980104
30 1 29 0xf54d8710 0xe6d3b398 0xf8c8365f 0x89980104
31 1 30 0xf54d8710 0xe6d3b398 0xf8c8365f 0x927b72e2
32 1 31 0xf54d8710 0xe6d3b398 0x2e69afc7 0x927b72e2
33 1 32 0xf54d8710 0xaeb35766 0x2e69afc7 0x927b72e2
34 1 33 0xb4bf680e 0xaeb35766 0x2e69afc7 0x927b72e2
35 1 34 0xb4bf680e 0xaeb35766 0x2e69afc7 0x4c8ffa80
36 1 35 0xb4bf680e 0xaeb35766 0x2361ed0a 0x4c8ffa80
37 1 36 0xb4bf680e 0x06a5e211 0x2361ed0a 0x4c8ffa80
38 1 37 0xb9c0c733 0x06a5e211 0x2361ed0a 0x4c8ffa80
39 1 38 0xb9c0c733 0x06a5e211 0x2361ed0a 0xf1e6dc7a
40 1 39 0xb9c0c733 0x06a5e211 0x23a9451b 0xf1e6dc7a
41 1 40 0xb9c0c733 0x8d41bf99 0x23a9451b 0xf1e6dc7a
42 1 41 0xa3e88ead 0x8d41bf99 0x23a9451b 0xf1e6dc7a
43 1 42 0xa3e88ead 0x8d41bf99 0x23a9451b 0x02c0b11c
44 1 43 0xa3e88ead 0x8d41bf99 0x66f6468d 0x02c0b11c
45 1 44 0xa3e88ead 0x90a35af5 0x66f6468d 0x02c0b11c
46 1 45 0xb5d41f9c 0x90a35af5 0x66f6468d 0x02c0b11c
47 1 46 0xb5d41f9c 0x90a35af5 0x66f6468d 0xa04b4904
48 1 47 0xb5d41f9c 0x90a35af5 0x703d54d8 0xa04b4904
49 1 48 0xb5d41f9c 0x71d10367 0x703d54d8 0xa04b4904
50 1 49 0xfc32dd6e 0x71d10367 0x703d54d8 0xa04b4904
51 1 50 0xfc32dd6e 0x71d10367 0x703d54d8 0x65456b34
52 1 51 0xfc32dd6e 0x71d10367 0xb35602cb 0x65456b34
53 1 52 0xfc32dd6e 0x33edb197 0xb35602cb 0x65456b34
54 1 53 0xc1e942f1 0x33edb197 0xb35602cb 0x65456b34
55 1 54 0xc1e942f1 0x33edb197 0xb35602cb 0xd9bb987c
56 1 55 0xc1e942f1 0x33edb197 0x23a68048 0xd9bb987c
57 1 56 0xc1e942f1 0x83877d1b 0x23a68048 0xd9bb987c
58 1 57 0x0077c208 0x83877d1b 0x23a68048 0xd9bb987c
59 1 58 0x0077c208 0x83877d1b 0x23a68048 0x847fc2e7
60 1 59 0x0077c208 0x83877d1b 0xa3e2247f 0x847fc2e7
61 1 60 0x0077c208 0x5e6bc930 0xa3e2247f 0x847fc2e7
62 1 61 0x708ed9c2 0x5e6bc930 0xa3e2247f 0x847fc2e7
63 1 62 0x708ed9c2 0x5e6bc930 0xa3e2247f 0x2baf1354
64 1 63 0x708ed9c2 0x5e6bc930 0xd38f1e7f 0x2baf1354
65 1 64 0x708ed9c2 0x1116e6d8 0xd38f1e7f 0x2baf1354
66 1 65 0xd7d3fcc3 0x00e49261 0x6c49fb7d 0x3be167ca
MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b
$ ./mymd5 -s"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
1 0 0 0x67452301 0xefcdab89 0x98badcfe 0x10325476
2 1 1 0xc6c10796 0xefcdab89 0x98badcfe 0x10325476
3 1 2 0xc6c10796 0xefcdab89 0x98badcfe 0x99a09999
4 1 3 0xc6c10796 0xefcdab89 0x11067980 0x99a09999
5 1 4 0xc6c10796 0x27bce07a 0x11067980 0x99a09999
6 1 5 0xf22e6c4e 0x27bce07a 0x11067980 0x99a09999
7 1 6 0xf22e6c4e 0x27bce07a 0x11067980 0xb4ac9218
8 1 7 0xf22e6c4e 0x27bce07a 0xa95a2fc0 0xb4ac9218
9 1 8 0xf22e6c4e 0xa4799506 0xa95a2fc0 0xb4ac9218
10 1 9 0x1eb3e7c1 0xa4799506 0xa95a2fc0 0xb4ac9218
11 1 10 0x1eb3e7c1 0xa4799506 0xa95a2fc0 0xa6e70cfe
12 1 11 0x1eb3e7c1 0xa4799506 0xca27520b 0xa6e70cfe
13 1 12 0x1eb3e7c1 0x8a7612ec 0xca27520b 0xa6e70cfe
14 1 13 0x3cbdcd45 0x8a7612ec 0xca27520b 0xa6e70cfe
15 1 14 0x3cbdcd45 0x8a7612ec 0xca27520b 0xb8dec763
16 1 15 0x3cbdcd45 0x8a7612ec 0xfa148c8a 0xb8dec763
17 1 16 0x3cbdcd45 0x5d38e690 0xfa148c8a 0xb8dec763
18 1 17 0x04b9d52a 0x5d38e690 0xfa148c8a 0xb8dec763
19 1 18 0x04b9d52a 0x5d38e690 0xfa148c8a 0x783002eb
20 1 19 0x04b9d52a 0x5d38e690 0xd3ee3ed1 0x783002eb
21 1 20 0x04b9d52a 0x47ae7c81 0xd3ee3ed1 0x783002eb
22 1 21 0x2d7d8a3f 0x47ae7c81 0xd3ee3ed1 0x783002eb
23 1 22 0x2d7d8a3f 0x47ae7c81 0xd3ee3ed1 0xd1210823
24 1 23 0x2d7d8a3f 0x47ae7c81 0x4b534dc3 0xd1210823
25 1 24 0x2d7d8a3f 0x75292030 0x4b534dc3 0xd1210823
26 1 25 0x9d2a6e33 0x75292030 0x4b534dc3 0xd1210823
27 1 26 0x9d2a6e33 0x75292030 0x4b534dc3 0x0e8d2e44
28 1 27 0x9d2a6e33 0x75292030 0xd473b564 0x0e8d2e44
29 1 28 0x9d2a6e33 0xf2ff6ea0 0xd473b564 0x0e8d2e44
30 1 29 0x9b085fa9 0xf2ff6ea0 0xd473b564 0x0e8d2e44
31 1 30 0x9b085fa9 0xf2ff6ea0 0xd473b564 0x4400a9bd
32 1 31 0x9b085fa9 0xf2ff6ea0 0x5993248f 0x4400a9bd
33 1 32 0x9b085fa9 0xdd789ecc 0x5993248f 0x4400a9bd
34 1 33 0x21c8d2b7 0xdd789ecc 0x5993248f 0x4400a9bd
35 1 34 0x21c8d2b7 0xdd789ecc 0x5993248f 0x1d55a18e
36 1 35 0x21c8d2b7 0xdd789ecc 0x056ec119 0x1d55a18e
37 1 36 0x21c8d2b7 0x1b9504f8 0x056ec119 0x1d55a18e
38 1 37 0x436b7fe9 0x1b9504f8 0x056ec119 0x1d55a18e
39 1 38 0x436b7fe9 0x1b9504f8 0x056ec119 0x075800c1
40 1 39 0x436b7fe9 0x1b9504f8 0xf404c2f6 0x075800c1
41 1 40 0x436b7fe9 0xcf0341ed 0xf404c2f6 0x075800c1
42 1 41 0x888e7d8a 0xcf0341ed 0xf404c2f6 0x075800c1
43 1 42 0x888e7d8a 0xcf0341ed 0xf404c2f6 0xbbdaecd8
44 1 43 0x888e7d8a 0xcf0341ed 0xce620273 0xbbdaecd8
45 1 44 0x888e7d8a 0x047b9419 0xce620273 0xbbdaecd8
46 1 45 0x2dbee21d 0x047b9419 0xce620273 0xbbdaecd8
47 1 46 0x2dbee21d 0x047b9419 0xce620273 0xe95c3a43
48 1 47 0x2dbee21d 0x047b9419 0xee46e961 0xe95c3a43
49 1 48 0x2dbee21d 0xf166f514 0xee46e961 0xe95c3a43
50 1 49 0xe47fd4f3 0xf166f514 0xee46e961 0xe95c3a43
51 1 50 0xe47fd4f3 0xf166f514 0xee46e961 0xfb887751
52 1 51 0xe47fd4f3 0xf166f514 0xf22aedcc 0xfb887751
53 1 52 0xe47fd4f3 0x7a13bc5c 0xf22aedcc 0xfb887751
54 1 53 0xa691d430 0x7a13bc5c 0xf22aedcc 0xfb887751
55 1 54 0xa691d430 0x7a13bc5c 0xf22aedcc 0x528452f2
56 1 55 0xa691d430 0x7a13bc5c 0x3fc23df6 0x528452f2
57 1 56 0xa691d430 0xefb0e72f 0x3fc23df6 0x528452f2
58 1 57 0x27145703 0xefb0e72f 0x3fc23df6 0x528452f2
59 1 58 0x27145703 0xefb0e72f 0x3fc23df6 0x21a11069
60 1 59 0x27145703 0xefb0e72f 0x374fbe79 0x21a11069
61 1 60 0x27145703 0x49d9a5b4 0x374fbe79 0x21a11069
62 1 61 0x1cb80f0a 0x49d9a5b4 0x374fbe79 0x21a11069
63 1 62 0x1cb80f0a 0x49d9a5b4 0x374fbe79 0xea3d3eb4
64 1 63 0x1cb80f0a 0x49d9a5b4 0x10f68731 0xea3d3eb4
65 1 64 0x1cb80f0a 0xef2e3a46 0x10f68731 0xea3d3eb4
66 1 65 0x83fd320b 0xdefbe5cf 0xa9b1642f 0xfa6f932a
67 2 1 0xeda23ed1 0xdefbe5cf 0xa9b1642f 0xfa6f932a
68 2 2 0xeda23ed1 0xdefbe5cf 0xa9b1642f 0x989939cf
69 2 3 0xeda23ed1 0xdefbe5cf 0x3c307338 0x989939cf
70 2 4 0xeda23ed1 0xddcf0634 0x3c307338 0x989939cf
71 2 5 0x75144433 0xddcf0634 0x3c307338 0x989939cf
72 2 6 0x75144433 0xddcf0634 0x3c307338 0xc8875807
73 2 7 0x75144433 0xddcf0634 0xc783cb60 0xc8875807
74 2 8 0x75144433 0x99b6b699 0xc783cb60 0xc8875807
75 2 9 0xa60a3f69 0x99b6b699 0xc783cb60 0xc8875807
76 2 10 0xa60a3f69 0x99b6b699 0xc783cb60 0xaa6630be
77 2 11 0xa60a3f69 0x99b6b699 0x64db26e9 0xaa6630be
78 2 12 0xa60a3f69 0x64cc7c5a 0x64db26e9 0xaa6630be
79 2 13 0xa70737da 0x64cc7c5a 0x64db26e9 0xaa6630be
80 2 14 0xa70737da 0x64cc7c5a 0x64db26e9 0x5473f8a7
81 2 15 0xa70737da 0x64cc7c5a 0x96f6586e 0x5473f8a7
82 2 16 0xa70737da 0xa36f556f 0x96f6586e 0x5473f8a7
83 2 17 0xa5050ad3 0xa36f556f 0x96f6586e 0x5473f8a7
84 2 18 0xa5050ad3 0xa36f556f 0x96f6586e 0x28776046
85 2 19 0xa5050ad3 0xa36f556f 0x27dcd8b4 0x28776046
86 2 20 0xa5050ad3 0x82b8827c 0x27dcd8b4 0x28776046
87 2 21 0xe04f070c 0x82b8827c 0x27dcd8b4 0x28776046
88 2 22 0xe04f070c 0x82b8827c 0x27dcd8b4 0x2f3cd2a2
89 2 23 0xe04f070c 0x82b8827c 0xc0d22b61 0x2f3cd2a2
90 2 24 0xe04f070c 0xdf35cb56 0xc0d22b61 0x2f3cd2a2
91 2 25 0x242dd210 0xdf35cb56 0xc0d22b61 0x2f3cd2a2
92 2 26 0x242dd210 0xdf35cb56 0xc0d22b61 0x576ace33
93 2 27 0x242dd210 0xdf35cb56 0x5c295967 0x576ace33
94 2 28 0x242dd210 0x2291191a 0x5c295967 0x576ace33
95 2 29 0x24eba695 0x2291191a 0x5c295967 0x576ace33
96 2 30 0x24eba695 0x2291191a 0x5c295967 0x4bd0378b
97 2 31 0x24eba695 0x2291191a 0x10c42a2f 0x4bd0378b
98 2 32 0x24eba695 0x9c03e2e8 0x10c42a2f 0x4bd0378b
99 2 33 0x5be1d526 0x9c03e2e8 0x10c42a2f 0x4bd0378b
100 2 34 0x5be1d526 0x9c03e2e8 0x10c42a2f 0x9e414279
101 2 35 0x5be1d526 0x9c03e2e8 0x9f4a1a7e 0x9e414279
102 2 36 0x5be1d526 0xa2448453 0x9f4a1a7e 0x9e414279
103 2 37 0xe14e403d 0xa2448453 0x9f4a1a7e 0x9e414279
104 2 38 0xe14e403d 0xa2448453 0x9f4a1a7e 0xe8cfd670
105 2 39 0xe14e403d 0xa2448453 0x60cc183a 0xe8cfd670
106 2 40 0xe14e403d 0xfe314121 0x60cc183a 0xe8cfd670
107 2 41 0xfff62809 0xfe314121 0x60cc183a 0xe8cfd670
108 2 42 0xfff62809 0xfe314121 0x60cc183a 0xe37209ac
109 2 43 0xfff62809 0xfe314121 0x8cb5221c 0xe37209ac
110 2 44 0xfff62809 0x7c7e974c 0x8cb5221c 0xe37209ac
111 2 45 0x54c9eb3a 0x7c7e974c 0x8cb5221c 0xe37209ac
112 2 46 0x54c9eb3a 0x7c7e974c 0x8cb5221c 0xd4d9c6ac
113 2 47 0x54c9eb3a 0x7c7e974c 0x2ec86f72 0xd4d9c6ac
114 2 48 0x54c9eb3a 0x79c0710a 0x2ec86f72 0xd4d9c6ac
115 2 49 0x02095af1 0x79c0710a 0x2ec86f72 0xd4d9c6ac
116 2 50 0x02095af1 0x79c0710a 0x2ec86f72 0x13d245fd
117 2 51 0x02095af1 0x79c0710a 0xa8dcfe26 0x13d245fd
118 2 52 0x02095af1 0x2ba98e3f 0xa8dcfe26 0x13d245fd
119 2 53 0xe126c1aa 0x2ba98e3f 0xa8dcfe26 0x13d245fd
120 2 54 0xe126c1aa 0x2ba98e3f 0xa8dcfe26 0x96b00fa7
121 2 55 0xe126c1aa 0x2ba98e3f 0x6f287ff5 0x96b00fa7
122 2 56 0xe126c1aa 0xfb7bcee0 0x6f287ff5 0x96b00fa7
123 2 57 0x452c1099 0xfb7bcee0 0x6f287ff5 0x96b00fa7
124 2 58 0x452c1099 0xfb7bcee0 0x6f287ff5 0xca801ba6
125 2 59 0x452c1099 0xfb7bcee0 0xc197ea8e 0xca801ba6
126 2 60 0x452c1099 0x5ac74608 0xc197ea8e 0xca801ba6
127 2 61 0x14ae42c6 0x5ac74608 0xc197ea8e 0xca801ba6
128 2 62 0x14ae42c6 0x5ac74608 0xc197ea8e 0xa52dae75
129 2 63 0x14ae42c6 0x5ac74608 0x826afd76 0xa52dae75
130 2 64 0x14ae42c6 0x16dd9203 0x826afd76 0xa52dae75
131 2 65 0x98ab74d1 0xf5d977d2 0x2c1c61a5 0x9f9d419f
MD5 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = d174ab98d277d9f5a5611c2c9f419d9f
mfg miracle173
https://github.com/python-forum-de/Jump-N-Run-pydesw
https://github.com/python-forum-de/Jump-N-Run-pydesw
@miracle173: Man könnte auch einfach ``inttypes.h`` einbinden und `uint32_t` verwenden, statt sich Typaliase zu definieren die nicht portabel sind. Das ist so 1992… 

- miracle173
- User
- Beiträge: 127
- Registriert: Samstag 6. Februar 2016, 00:28
@BlackJack: Das Dokument ist mit April 1992 datiert, vermutlich ist das Programm aus 1991. Also glaube ich, ist der Autor entschuldigt. Offenbar war er sich der Problematik bewusst und hat sein Programm so angelegt, das nach einer kleinen Änderung alles wieder funktioniert hat.
Aber du hast natürlich recht, ich habe das nun so ausgebessert.- Das ist hoffentlich sinnvoller.
Aber du hast natürlich recht, ich habe das nun so ausgebessert.- Das ist hoffentlich sinnvoller.
Code: Alles auswählen
...
#include <inttypes.h>
...
/* UINT2 defines a two byte word */
typedef uint16_t UINT2;
/* UINT4 defines a four byte word */
typedef uint32_t UINT4;
...
mfg miracle173
https://github.com/python-forum-de/Jump-N-Run-pydesw
https://github.com/python-forum-de/Jump-N-Run-pydesw
- miracle173
- User
- Beiträge: 127
- Registriert: Samstag 6. Februar 2016, 00:28
Damit meine Recherchen nicht nur für die Katz (und für die Python) sind, habe ich den Wikipediaartikle umd den Abschnitt Referenzimplementation ergänzt.
mfg miracle173
https://github.com/python-forum-de/Jump-N-Run-pydesw
https://github.com/python-forum-de/Jump-N-Run-pydesw