Falsches Ergebnis in MD5 Hashfunktion

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
prog(r)amer
User
Beiträge: 10
Registriert: Freitag 4. Januar 2013, 12:57

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.
Benutzeravatar
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.
Benutzeravatar
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.
Benutzeravatar
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

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
Dein Phyton-Code lautet so:

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
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.
Benutzeravatar
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

Code: Alles auswählen

/* UINT4 defines a four byte word */
typedef unsigned long int UINT4;
Allerdings ist bei mir sizeof(unsigned long int)=8, also 8 Bytes. Mann muss dann

Code: Alles auswählen

/* UINT4 defines a four byte word */
typedef unsigned int UINT4;
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.
Benutzeravatar
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.

Code: Alles auswählen

trace(step,a,b,c,d) 
gibt dabei

Code: Alles auswählen

count  round  step a b c d
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.

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
BlackJack

@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… ;-)
Benutzeravatar
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.

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;
...
Benutzeravatar
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.
Antworten