Deutsch
DLLs

md5.dll - MD5 Hashes aus Strings erstellen

 

Sven
Bader
Herunterladen

Hallo zusammen,

wieder möchte ich eine kleine DLL bereitstellen. Ab der 5. DLL erstelle ich dann eine einzelne mit allen Funktionen

Es lassen sich MD5 Prüfsummen aus Strings generieren, welche man bekanntlich für allerhand Zwecke einsetzen kann. Ich habe viel getestet bin mir aber der Stabilität und Korrektheit noch nicht 100% sicher. Ich freue mich hier also auf Feedback!

Viele Grüße
Sven



Hier ein Beispielaufruf. Es braucht eine kleine Hilfsfunktion, da Funktionsaufrufe und Rückgaben in DLLs Strings nur als Adresse verarbeiten können:
declare hDll&, text$, time&
let hDll& = @UseDll("md5.dll")
ImportFunc(hDll&,"md5", "md5DLL")

Proc md5

    Parameters inputstring$
    Declare target#
    Dim target#, 33
    md5DLL(Addr(inputstring$), target#)
    Return string$(target#,0)

EndProc

Cls
time& = &gettickcount
Print "Ä:                  " + md5("Ä")
Print "ABC:                " + md5("ABC")
Print "test:               " + md5("test")
Print "Hallo Welt:         " + md5("Hallo Welt")
Print "1234567890:         " + md5("1234567890")
Print "10.000 Leerzeichen: " + md5(Space$(10000))
print (&gettickcount-time&) + "ms"
Waitinput
FreeDll hDll&
End

Oder ganz ohne DLL nativ in XProfan. Beim Compilieren in XProfan anstatt Profan2CPP müsste die Compileranweisung im "Proc md5_rl" noch entfernt werden. Das unsigned right shift <<<, ein paar | = Zuweisungen und die Tilde ~ (Bitwise Not) musste ich umschreiben, da es diese in XProfan nicht gibt. Ich basiere übrigens auf dem C++ Code von Paul Johnston  [...] 
Def md5_tilde(1) (&(1) * (-1) -1)'~
Declare md5_x&[524288], md5_hc$
'right shift unsigned >>>

Proc md5_rsu

    Parameters a&, b&
    Declare x&
    x& = a& >> b&

    whileloop 0, b&-1

        x& = setbit(x&,31-&loop,0)

    endwhile

    return x&

EndProc

Proc md5_rh

    Parameters n&
    Declare j&, s$
    s$ = ""

    Whileloop 0, 3

        j& = &loop
        s$ = s$ + Mid$(md5_hc$, ((n& >> (j&*8 + 4)) & $0F)+1,1) + Mid$(md5_hc$, ((n& >> (j&*8)) & $0F)+1,1)

    Endwhile

    return s$

EndProc

Proc md5_ad

    Parameters x&, y&
    Declare l&, m&, return&
    l& = (x& & $FFFF) + (y& & $FFFF)
    m& = (x& >> 16) + (y& >> 16) + (l& >> 16)
    return& = (m& << 16) | (l& & $FFFF)
    return return&

EndProc

Proc md5_rl

    Declare return&
     $IFDEF COMPILER
    'P2CPP: <INLINE_CPP>
    unsigned long lN = LongParam(1);
    unsigned long lC = LongParam(2);
    unsigned unsigned rr = (lN >> (32 - lC));
    lReturn = _L(((lN << lC))) | _L(rr);
    'P2CPP: </INLINE_CPP>
     $ELSE
    Parameters n&,c&
    return& = (n& << c&) | md5_rsu(n&,(32-c&))
     $ENDIF
    return return&

Endproc

Proc md5_cm

    Parameters q&,a&,b&,x&,s&,t&
    Declare return&
    return& = md5_ad(md5_rl(md5_ad(md5_ad(a&,q&),md5_ad(x&,t&)),s&),b&)
    return return&

EndProc

Proc md5_ff

    Parameters a&,b&,c&,d&,x&,s&,t&
    Declare return&
    return& = md5_cm(((b& & c&) | (md5_tilde(b&) & d&)),a&,b&,x&,s&,t&)
    return return&

EndProc

Proc md5_gg

    Parameters a&,b&,c&,d&,x&,s&,t&
    Declare return&
    return& = md5_cm((b& & d&) | (c& & md5_tilde(d&)),a&,b&,x&,s&,t&)
    return return&

EndProc

Proc md5_hh

    Parameters a&,b&,c&,d&,x&,s&,t&
    Declare return&
    return& = md5_cm(xor(xor(b&, c&), d&),a&,b&,x&,s&,t&)
    return return&

EndProc

Proc md5_ii

    Parameters a&,b&,c&,d&,x&,s&,t&
    Declare return&
    return& = md5_cm(XOR(c&, (b& | md5_tilde(d&))),a&,b&,x&,s&,t&)
    return return&

EndProc

Proc md5_sb

    Parameters x$
    Declare i&, nblk&, return&
    nblk& = ((len(x$) + 8) >> 6) + 1

    Whileloop 0, (nblk&*16 - 1)

        i& = &loop
        md5_x&[i&] = 0

    Endwhile

    Whileloop 0, (len(x$) - 1)

        i& = &loop
        md5_x&[i& >> 2] = md5_x&[i& >> 2] | (ord(Mid$(x$,i&+1,1)) << ((i& MOD 4)*8))

    Endwhile

    inc i&
    md5_x&[i& >> 2] = md5_x&[i& >> 2] | ($80 << (((i&) MOD 4)*8))
    md5_x&[nblk&*16-2] = len(x$)*8
    return& = nblk&*16
    return return&

EndProc

Proc md5

    parameters inputString$
    declare a&,b&,c&,d&,olda&,oldb&,oldc&,oldd&,i&,lenx&
    md5_hc$ = "0123456789abcdef"
    lenx& = md5_sb(inputString$)
    'messagebox str$(lenx& ),"",0
    a& = 1732584193
    b& = -271733879
    c& = -1732584194
    d& = 271733878
    '  messagebox str$(lenx&),"",0

    While i& < lenx&

        olda& = a&
        oldb& = b&
        oldc& = c&
        oldd& = d&
        a& = md5_ff(a&,b&,c&,d&,md5_x&[i& + 0], 7, -680876936)
        d& = md5_ff(d&,a&,b&,c&,md5_x&[i& + 1],12, -389564586)
        c& = md5_ff(c&,d&,a&,b&,md5_x&[i& + 2],17, 606105819)
        b& = md5_ff(b&,c&,d&,a&,md5_x&[i& + 3],22,-1044525330)
        a& = md5_ff(a&,b&,c&,d&,md5_x&[i& + 4], 7, -176418897)
        d& = md5_ff(d&,a&,b&,c&,md5_x&[i& + 5],12, 1200080426)
        c& = md5_ff(c&,d&,a&,b&,md5_x&[i& + 6],17,-1473231341)
        b& = md5_ff(b&,c&,d&,a&,md5_x&[i& + 7],22, -45705983)
        a& = md5_ff(a&,b&,c&,d&,md5_x&[i& + 8], 7, 1770035416)
        d& = md5_ff(d&,a&,b&,c&,md5_x&[i& + 9],12,-1958414417)
        c& = md5_ff(c&,d&,a&,b&,md5_x&[i& + 10],17,  -42063)
        b& = md5_ff(b&,c&,d&,a&,md5_x&[i& + 11],22,-1990404162)
        a& = md5_ff(a&,b&,c&,d&,md5_x&[i& + 12], 7, 1804603682)
        d& = md5_ff(d&,a&,b&,c&,md5_x&[i& + 13],12, -40341101)
        c& = md5_ff(c&,d&,a&,b&,md5_x&[i& + 14],17,-1502002290)
        b& = md5_ff(b&,c&,d&,a&,md5_x&[i& + 15],22, 1236535329)
        a& = md5_gg(a&,b&,c&,d&,md5_x&[i& + 1], 5, -165796510)
        d& = md5_gg(d&,a&,b&,c&,md5_x&[i& + 6], 9,-1069501632)
        c& = md5_gg(c&,d&,a&,b&,md5_x&[i& + 11],14, 643717713)
        b& = md5_gg(b&,c&,d&,a&,md5_x&[i& + 0],20, -373897302)
        a& = md5_gg(a&,b&,c&,d&,md5_x&[i& + 5], 5, -701558691)
        d& = md5_gg(d&,a&,b&,c&,md5_x&[i& + 10], 9, 38016083)
        c& = md5_gg(c&,d&,a&,b&,md5_x&[i& + 15],14, -660478335)
        b& = md5_gg(b&,c&,d&,a&,md5_x&[i& + 4],20, -405537848)
        a& = md5_gg(a&,b&,c&,d&,md5_x&[i& + 9], 5, 568446438)
        d& = md5_gg(d&,a&,b&,c&,md5_x&[i& + 14], 9,-1019803690)
        c& = md5_gg(c&,d&,a&,b&,md5_x&[i& + 3],14, -187363961)
        b& = md5_gg(b&,c&,d&,a&,md5_x&[i& + 8],20, 1163531501)
        a& = md5_gg(a&,b&,c&,d&,md5_x&[i& + 13], 5,-1444681467)
        d& = md5_gg(d&,a&,b&,c&,md5_x&[i& + 2], 9, -51403784)
        c& = md5_gg(c&,d&,a&,b&,md5_x&[i& + 7],14, 1735328473)
        b& = md5_gg(b&,c&,d&,a&,md5_x&[i& + 12],20,-1926607734)
        a& = md5_hh(a&,b&,c&,d&,md5_x&[i& + 5], 4, -378558)
        d& = md5_hh(d&,a&,b&,c&,md5_x&[i& + 8],11,-2022574463)
        c& = md5_hh(c&,d&,a&,b&,md5_x&[i& + 11],16, 1839030562)
        b& = md5_hh(b&,c&,d&,a&,md5_x&[i& + 14],23, -35309556)
        a& = md5_hh(a&,b&,c&,d&,md5_x&[i& + 1], 4,-1530992060)
        d& = md5_hh(d&,a&,b&,c&,md5_x&[i& + 4],11, 1272893353)
        c& = md5_hh(c&,d&,a&,b&,md5_x&[i& + 7],16, -155497632)
        b& = md5_hh(b&,c&,d&,a&,md5_x&[i& + 10],23,-1094730640)
        a& = md5_hh(a&,b&,c&,d&,md5_x&[i& + 13], 4, 681279174)
        d& = md5_hh(d&,a&,b&,c&,md5_x&[i& + 0],11, -358537222)
        c& = md5_hh(c&,d&,a&,b&,md5_x&[i& + 3],16, -722521979)
        b& = md5_hh(b&,c&,d&,a&,md5_x&[i& + 6],23, 76029189)
        a& = md5_hh(a&,b&,c&,d&,md5_x&[i& + 9], 4, -640364487)
        d& = md5_hh(d&,a&,b&,c&,md5_x&[i& + 12],11, -421815835)
        c& = md5_hh(c&,d&,a&,b&,md5_x&[i& + 15],16, 530742520)
        b& = md5_hh(b&,c&,d&,a&,md5_x&[i& + 2],23, -995338651)
        a& = md5_ii(a&,b&,c&,d&,md5_x&[i& + 0], 6, -198630844)
        d& = md5_ii(d&,a&,b&,c&,md5_x&[i& + 7],10, 1126891415)
        c& = md5_ii(c&,d&,a&,b&,md5_x&[i& + 14],15,-1416354905)
        b& = md5_ii(b&,c&,d&,a&,md5_x&[i& + 5],21, -57434055)
        a& = md5_ii(a&,b&,c&,d&,md5_x&[i& + 12], 6, 1700485571)
        d& = md5_ii(d&,a&,b&,c&,md5_x&[i& + 3],10,-1894986606)
        c& = md5_ii(c&,d&,a&,b&,md5_x&[i& + 10],15, -1051523)
        b& = md5_ii(b&,c&,d&,a&,md5_x&[i& + 1],21,-2054922799)
        a& = md5_ii(a&,b&,c&,d&,md5_x&[i& + 8], 6, 1873313359)
        d& = md5_ii(d&,a&,b&,c&,md5_x&[i& + 15],10, -30611744)
        c& = md5_ii(c&,d&,a&,b&,md5_x&[i& + 6],15,-1560198380)
        b& = md5_ii(b&,c&,d&,a&,md5_x&[i& + 13],21, 1309151649)
        a& = md5_ii(a&,b&,c&,d&,md5_x&[i& + 4], 6, -145523070)
        d& = md5_ii(d&,a&,b&,c&,md5_x&[i& + 11],10,-1120210379)
        c& = md5_ii(c&,d&,a&,b&,md5_x&[i& + 2],15, 718787259)
        b& = md5_ii(b&,c&,d&,a&,md5_x&[i& + 9],21, -343485551)
        a& = md5_ad(a&,olda&)
        b& = md5_ad(b&,oldb&)
        c& = md5_ad(c&,oldc&)
        d& = md5_ad(d&,oldd&)
        i& = i& + 16

    EndWhile

    Return (md5_rh(a&) + md5_rh(b&) + md5_rh(c&) + md5_rh(d&))

EndProc

cls
declare time&
time&  = &gettickcount
print "Hallo Welt: "+md5("Hallo Welt")
print "ÄÖÜ: "+md5(Utf8Encode("ÄÖÜ"))
print (&gettickcount-time&)
waitkey
end

94 kB
Hochgeladen: vor 7 Tagen
Ladeanzahl8
Herunterladen
6 kB
Hochgeladen: vor 7 Tagen
Ladeanzahl2
Herunterladen
 
vor 7 Tagen  
 




Sven
Bader
Habs noch mal aktualisiert. Die DLL ist jetzt schneller und verarbeitet Umlaute etc. korrekt.
 
vor 5 Tagen  
 



Zur DLL


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

93 Betrachtungen

Unbenanntvor 0 min.
HofKGestern (21:03)
Sven BaderVorgestern (17:08)
Roland SchäfferVorgestern (09:04)
Manfred Barei vor 4 Tagen
Mehr...

Themeninformationen

Dieses Thema hat 1 Teilnehmer:

Sven Bader (2x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie