Md5 Finde Fehler nicht

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

ToeB

Betreff: Md5 Finde Fehler nicht

BeitragSa, Nov 26, 2011 0:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

Da ich für mein Programm in BlitzMax eine Md5 Prüfsumme brauche, aber keinen Code dafür gefunden habe, wollte ich mir den Code für Blitz3D umschreiben in BlitzMax. Aber er gibt mir einen 32Byte String mit lauter "f"'s zurück. Bei jedem String. Leider kann ich den Fehler nicht finden Sad

Ich hoffe ihr könnt mir helfen !
Hier der code:
BlitzMax: [AUSKLAPPEN]
SuperStrict 

Local txt:String = Input( "Text für MD5>" )
Print "Text aus MD5>"+Md5( txt )
End


Function Md5:String( txt:String )

Local txt_len:Int = Len( txt )
Local bit_len:Int = txt_len * 8
Local blocks:Int = Ceil((bit_len+65) / 512.0)
Local bank_size:Int = blocks * 512

Local r:Int[64], k:Int[64], i:Int, j:Int, l:Int
r = [7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]
k[0] = $d76aa478;k[1] = $e8c7b756;k[2] = $242070db;k[3] = $c1bdceee;k[4] = $f57c0faf;k[5] = $4787c62a
k[6] = $a8304613;k[7] = $fd469501;k[8] = $698098d8;k[9] = $8b44f7af;k[10] = $ffff5bb1;k[11] = $895cd7be
k[12] = $6b901122;k[13] = $fd987193;k[14] = $a679438e;k[15] = $49b40821;k[16] = $f61e2562;k[17] = $c040b340
k[18] = $265e5a51;k[19] = $e9b6c7aa;k[20] = $d62f105d;k[21] = $2441453;k[22] = $d8a1e681;k[23] = $e7d3fbc8
k[24] = $21e1cde6;k[25] = $c33707d6;k[26] = $f4d50d87;k[27] = $455a14ed;k[28] = $a9e3e905;k[29] = $fcefa3f8
k[30] = $676f02d9;k[31] = $8d2a4c8a;k[32] = $fffa3942;k[33] = $8771f681;k[34] = $6d9d6122;k[35] = $fde5380c
k[36] = $a4beea44;k[37] = $4bdecfa9;k[38] = $f6bb4b60;k[39] = $bebfbc70;k[40] = $289b7ec6;k[41] = $eaa127fa
k[42] = $d4ef3085;k[43] = $4881d05;k[44] = $d9d4d039;k[45] = $e6db99e5;k[46] = $1fa27cf8;k[47] = $c4ac5665
k[48] = $f4292244;k[49] = $432aff97;k[50] = $ab9423a7;k[51] = $fc93a039;k[52] = $655b59c3;k[53] = $8f0ccc92
k[54] = $ffeff47d;k[55] = $85845dd1;k[56] = $6fa87e4f;k[57] = $fe2ce6e0;k[58] = $a3014314;k[59] = $4e0811a1
k[60] = $f7537e82;k[61] = $bd3af235;k[62] = $2ad7d2bb;k[63] = $eb86d391

Local h0:Int = $67452301
Local h1:Int = $EFCDAB89
Local h2:Int = $98BADCFE
Local h3:Int = $10325476

Local outbank:TBank = CreateBank( Ceil(bank_size / 8.0) )
For i = 1 To txt_len
PokeByte( outbank, i-1, Asc( Mid( txt, i, 1 ) ) )
Next



SetBit( outbank, bit_len )

Local strlenght:Int[65]
Local num:Int,bit64:Byte[64]

num = bit_len

For i=63 To 0 Step -1
If num - (2^i) >= 0 Then bit64[63-i] = 1 ; num = num - (2^i)
Next

l=0
For i=63 To 0 Step -8
For j=0 To 7
If bit64[i-7+j]=1 Then strlenght[l] = 1
l =l + 1
Next
Next

For l=0 To 63
If strlenght[l] Then
SetBit(outbank,bank_size-64+l)
EndIf
Next

For i = 1 To blocks
Local parts:Int[16]
For j = 0 To 15
parts[j] = PeekInt(outbank,(i-1)*64+j*4)
Next

Local A:Int = h0
Local B:Int = h1
Local C:Int = h2
Local D:Int = h3
Local f:Int, g:Int

For l = 0 To 63
If l >= 0 And l <=15 Then
f = (B & C) | ((~B) & D)
g = l
ElseIf l >= 16 And l <=31 Then
f = (D & B) | ((~D) & C)
g = (l*5 + 1) Mod 16
ElseIf l >= 32 And l <=47 Then
f = B ~ C ~ D
g = (l*3 + 5) Mod 16
ElseIf l >= 48 And l <=63 Then
f = C ~ (B | (~D))
g = (l*7) Mod 16
EndIf

Local temp:Int = D
D = C
C = B
B=(((A + f + k[l] + parts[g]) Shl R[l]) | ((A + f + k[l] + parts[g]) Shr (32 - R[l]))) + B
A = temp
Next

h0 = h0 + A
h1 = h1 + B
h2 = h2 + C
h3 = h3 + D

Next


Local output:String = ""
For i=0 To 3

Local tmp:Int
Select i
Case 0 ; tmp = h0
Case 1 ; tmp = h1
Case 2 ; tmp = h2
Case 3 ; tmp = h3
End Select

output = output + Right(Hex((tmp And $FF)),2)
output = output + Right(Hex((tmp And $FF00)/$100),2)
output = output + Right(Hex((tmp And $FF0000)/$10000),2)
output = output + Right(Hex((tmp And $FF000000)/$1000000),2)
Next

Return Lower(output)

End Function


Function SetBit(bank:TBank, offset:Int)
Local pos:Int = Floor(offset / 8.0)
Local old_byte:Byte = PeekByte(bank,pos)
Local local_pos:Int = offset Mod 8
Local i:Int

Local new_byte:Byte
Local bit:Byte[8]

For i=7 To 0 Step -1
If old_byte - (2^i) >= 0 Then bit[7-i] = 1 ; old_byte = old_byte - (2^i)
Next

bit[local_pos] = 1

For i = 7 To 0 Step -1
If bit[7-i] = 1 Then new_byte = new_byte + (2^i)
Next

PokeByte(bank,pos,new_byte)
End Function


Edit: Ok, hab den Fehler gefunden. Es lag am Zusammensetzten des Strings, dort habe ich statt "&" ein And stehen gelassen. Und das ist ja nicht das gleiche wie in Blitz3D. Allerdings spuckt die Funktion mir immer andere Werte aus, und das bei gleicher Eingabe, zwar manchmal den richtigen Wert aber oft nen anderen.

Richtiger Wert für "Blitz3D!" :
Code: [AUSKLAPPEN]
9fc8de38fc2d988393651f606228f31e


Werte der BlitzMax Funktion für 20 Durchläufe für "Blitz3D!":
Code: [AUSKLAPPEN]
Text für MD5>Blitz3D!
Text aus MD5>4d7997cf5e199d3e8bf5890efaded4c6
Text aus MD5>9fc8de38fc2d988393651f606228f31e <<
Text aus MD5>369624bff9a0d604e5e6a2966341d6c7
Text aus MD5>e090000dc36ba533c3beb3b7202c2d17
Text aus MD5>2584a36920efe91425cae0460c26faa8
Text aus MD5>898abeb7e9aad01b488dc288cc764a97
Text aus MD5>d1aff0559c0e3fde6fc5709ba522e07f
Text aus MD5>9fc8de38fc2d988393651f606228f31e <<
Text aus MD5>9fc8de38fc2d988393651f606228f31e <<
Text aus MD5>25d1aecfcc21ad4920c9c3f59cad98b3
Text aus MD5>aa8542297b1d8359918882adb0a94280
Text aus MD5>2ba0253867796a69d9542669c8514040
Text aus MD5>577c66e6c9e41a96dd0f1ba4023ad5d2
Text aus MD5>e6b137297fe2601693e5fc66fc11ed06
Text aus MD5>1678b97cf713f160e9c9aba70137b8c2
Text aus MD5>bc02b86002d44e5bccdc4b7a59208195
Text aus MD5>aa8542297b1d8359918882adb0a94280
Text aus MD5>2ba0253867796a69d9542669c8514040
Text aus MD5>577c66e6c9e41a96dd0f1ba4023ad5d2
Text aus MD5>d1aff0559c0e3fde6fc5709ba522e07f
Text aus MD5>9fc8de38fc2d988393651f606228f31e <<


Und auch das ist leider etwas zufällig. Es kommt nie die Selbe Reihenfolge !


lg
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Firstdeathmaker

BeitragSa, Nov 26, 2011 13:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier, hab ich mal hervorgekramt:

Code: [AUSKLAPPEN]
Function md5:String(sMessage:String)

    Local nblk:Int            = ((Len(sMessage$) + 8) Shr 6) + 1
    Local MD5_x:Int[(nblk * 16)]
   Local MD5_a:Int          = 1732584193
    Local MD5_b:Int          = -271733879
    Local MD5_c:Int            = -1732584194
    Local MD5_d:Int            = 271733878
   Local MD5_AA:Int         = 0
   Local MD5_BB:Int         = 0
   Local MD5_CC:Int         = 0
   Local MD5_DD:Int         = 0
   Local i:Int               = 0
      
   For i = 0 To nblk * 16 - 1
   
      MD5_x[i] = 0
   
   Next
   
   For i = 0 To (Len(sMessage$) - 1)
   
      MD5_x[(i Shr 2)] = MD5_x[(i Shr 2)] | (Asc(Mid(sMessage$, (i + 1), 1)) Shl ((i Mod 4) * 8))
     
   Next
   
   MD5_x[(i Shr 2)]       = MD5_x[(i Shr 2)] | (128 Shl (((i) Mod 4) * 8))
    MD5_x[nblk * 16 - 2]   = Len(sMessage$) * 8

   For Local k:Int = 0 To (nblk * 16 - 1) Step 16
   
      MD5_AA = MD5_a
       MD5_BB = MD5_b
       MD5_CC = MD5_c
       MD5_DD = MD5_d

    'Round 1
        MD5_a = MD5_FF(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 0], 7, -680876936)      '&HD76AA478
        MD5_d = MD5_FF(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 1], 12, -389564586)   '&HE8C7B756
        MD5_c = MD5_FF(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 2], 17, 606105819 )   '&H242070DB
        MD5_b = MD5_FF(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 3], 22, -1044525330)   '&HC1BDCEEE
        MD5_a = MD5_FF(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 4], 7, -176418897)      '&HF57C0FAF
        MD5_d = MD5_FF(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 5], 12, 1200080426 )   '&H4787C62A
        MD5_c = MD5_FF(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 6], 17, -1473231341)   '&HA8304613
        MD5_b = MD5_FF(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 7], 22, -45705983)      '&HFD469501
        MD5_a = MD5_FF(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 8], 7, 1770035416)    '&H698098D8
        MD5_d = MD5_FF(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 9], 12, -1958414417 )   '&H8B44F7AF
        MD5_c = MD5_FF(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 10], 17, -42063 )      '&HFFFF5BB1
        MD5_b = MD5_FF(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 11], 22, -1990404162)   '&H895CD7BE
        MD5_a = MD5_FF(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 12], 7, 1804603682)    '&H6B901122
        MD5_d = MD5_FF(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 13], 12, -40341101)    '&HFD987193
        MD5_c = MD5_FF(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 14], 17, -1502002290)   '&HA679438E
        MD5_b = MD5_FF(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 15], 22, 1236535329)   '&H49B40821

    'Round 2
        MD5_a = MD5_GG(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 1], 5, -165796510)      '&HF61E2562
        MD5_d = MD5_GG(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 6], 9, -1069501632)   '&HC040B340
        MD5_c = MD5_GG(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 11], 14, 643717713)   '&H265E5A51
        MD5_b = MD5_GG(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 0], 20, -373897302)   '&HE9B6C7AA
        MD5_a = MD5_GG(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 5], 5, -701558691)    '&HD62F105D
        MD5_d = MD5_GG(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 10], 9, 38016083)      '&H2441453
        MD5_c = MD5_GG(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 15], 14, -660478335)   '&HD8A1E681
        MD5_b = MD5_GG(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 4], 20, -405537848)   '&HE7D3FBC8
        MD5_a = MD5_GG(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 9], 5, 568446438)      '&H21E1CDE6
        MD5_d = MD5_GG(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 14], 9, -1019803690)   '&HC33707D6
        MD5_c = MD5_GG(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 3], 14, -187363961)   '&HF4D50D87
        MD5_b = MD5_GG(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 8], 20, 1163531501)   '&H455A14ED
        MD5_a = MD5_GG(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 13], 5, -1444681467)   '&HA9E3E905
        MD5_d = MD5_GG(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 2], 9, -51403784)      '&HFCEFA3F8
        MD5_c = MD5_GG(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 7], 14, 1735328473)   '&H676F02D9
        MD5_b = MD5_GG(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 12], 20, -1926607734)   '&H8D2A4C8A

    'Round 3
        MD5_a = MD5_HH(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 5], 4, -378558)      '&HFFFA3942
        MD5_d = MD5_HH(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 8], 11, -2022574463)   '&H8771F681
        MD5_c = MD5_HH(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 11], 16, 1839030562)   '&H6D9D6122
        MD5_b = MD5_HH(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 14], 23, -35309556)   '&HFDE5380C
        MD5_a = MD5_HH(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 1], 4, -1530992060)   '&HA4BEEA44
        MD5_d = MD5_HH(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 4], 11, 1272893353)   '&H4BDECFA9
        MD5_c = MD5_HH(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 7], 16, -155497632)   '&HF6BB4B60
        MD5_b = MD5_HH(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 10], 23, -1094730640)   '&HBEBFBC70
        MD5_a = MD5_HH(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 13], 4, 681279174)      '&H289B7EC6
        MD5_d = MD5_HH(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 0], 11, -358537222)   '&HEAA127FA
        MD5_c = MD5_HH(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 3], 16, -722521979)   '&HD4EF3085
        MD5_b = MD5_HH(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 6], 23, 76029189)      '&H4881D05
        MD5_a = MD5_HH(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 9], 4, -640364487)      '&HD9D4D039
        MD5_d = MD5_HH(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 12], 11, -421815835)   '&HE6DB99E5
        MD5_c = MD5_HH(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 15], 16, 530742520)   '&H1FA27CF8
        MD5_b = MD5_HH(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 2], 23, -995338651)   '&HC4AC5665

    'Round 4
        MD5_a = MD5_II(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 0], 6, -198630844)      '&HF4292244
        MD5_d = MD5_II(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 7], 10, 1126891415)   '&H432AFF97
        MD5_c = MD5_II(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 14], 15, -1416354905)   '&HAB9423A7
        MD5_b = MD5_II(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 5], 21, -57434055)      '&HFC93A039
        MD5_a = MD5_II(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 12], 6, 1700485571)   '&H655B59C3
        MD5_d = MD5_II(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 3], 10, -1894986606)   '&H8F0CCC92
        MD5_c = MD5_II(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 10], 15, -1051523)      '&HFFEFF47D
        MD5_b = MD5_II(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 1], 21, -2054922799)   '&H85845DD1
        MD5_a = MD5_II(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 8], 6, 1873313359)      '&H6FA87E4F
        MD5_d = MD5_II(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 15], 10, -30611744)   '&HFE2CE6E0
        MD5_c = MD5_II(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 6], 15, -1560198380 )   '&HA3014314
        MD5_b = MD5_II(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 13], 21, 1309151649)   '&H4E0811A1     
        MD5_a = MD5_II(MD5_a, MD5_b, MD5_c, MD5_d, MD5_x[k + 4], 6, -145523070)      '&HF7537E82
        MD5_d = MD5_II(MD5_d, MD5_a, MD5_b, MD5_c, MD5_x[k + 11], 10, -1120210379)   '&HBD3AF235
        MD5_c = MD5_II(MD5_c, MD5_d, MD5_a, MD5_b, MD5_x[k + 2], 15, 718787259)      '&H2AD7D2BB
        MD5_b = MD5_II(MD5_b, MD5_c, MD5_d, MD5_a, MD5_x[k + 9], 21, -343485551)   '&HEB86D391

        MD5_a = MD5_a + MD5_AA
        MD5_b = MD5_b + MD5_BB
        MD5_c = MD5_c + MD5_CC
        MD5_d = MD5_d + MD5_DD

    Next

    Return Lower(WordToHex$(MD5_a) + WordToHex$(MD5_b) + WordToHex$(MD5_c) + WordToHex$(MD5_d))

End Function


Function MD5_F:Int(x:Int, y:Int, z:Int)

   Return ((x & y) | (~(x) & z))

End Function


Function MD5_G:Int(x:Int, y:Int, z:Int)

    Return ((x & z) | (y & (~(z))))

End Function


Function MD5_H:Int(x:Int, y:Int, z:Int)

    Return (x ~ y ~ z)

End Function


Function MD5_I:Int(x:Int, y:Int, z:Int)

    Return (y ~ (x | (~z)))

End Function


Function MD5_FF:Int(a:Int, b:Int, c:Int, d:Int, x:Int, s:Int, ac:Int)

    a = (a + ((MD5_F(b, c, d)+ x)+ ac))
    a = RotateLeft(a, s)

    Return a + b

End Function


Function MD5_GG:Int(a:Int, b:Int, c:Int, d:Int, x:Int, s:Int, ac:Int)

    a = (a + ((MD5_G(b, c, d) + x) + ac))
    a = RotateLeft(a, s)

    Return a + b

End Function


Function MD5_HH:Int(a:Int, b:Int, c:Int, d:Int, x:Int, s:Int, ac:Int)

    a = (a + ((MD5_H(b, c, d) + x) + ac))
    a = RotateLeft(a, s)

    Return a + b

End Function


Function MD5_II:Int(a:Int, b:Int, c:Int, d:Int, x:Int, s:Int, ac:Int)

    a = (a + ((MD5_I(b, c, d) + x) + ac))
    a = RotateLeft(a, s)

    Return a + b

End Function


Function RotateLeft:Int(lValue:Int, iShiftBits:Int)

    Return (lValue Shl iShiftBits) | (lValue Shr (32 - iShiftBits))

End Function


Function WordToHex$(lValue:Int)
   
   Local returnString$

   returnString$ = Hex$(lValue)

   Return returnString$[6..8] + returnString$[4..6] + returnString$[2..4] + returnString$[0..2]

End Function
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

ToeB

BeitragSa, Nov 26, 2011 14:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Perfekt Very Happy

Vielen Dank !

lg
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group