Français
DLL

md5.dll - MD5 Hashes aus Cordes erstellen

 

Sven
Bader
Herunterladen

allô zusammen,

wieder voudrais je une kleine DLL bereitstellen. Ab qui 5. DLL erstelle je ensuite une einzelne avec allen Funktionen

Es laisser sich MD5 Prüfsummen aus Cordes generieren, quelle on bekanntlich pour allerhand Zwecke einsetzen peux. j'ai viel getestet suis mir mais qui Stabilität et Korrektheit encore pas 100% sûrement. je suis mich ici alors sur Feedback!

Viele Grüße
Sven



ici un Beispielaufruf. Es braucht une kleine Hilfsfunktion, là Funktionsaufrufe et Rückgaben dans DLL Cordes seulement comme Adresse verarbeiten peut:
declare hDll&, text$, time&
let hDll& = @UseDll("md5.dll")
ImportFunc(hDll&,"md5", "md5DLL")

Proc md5

    Paramètres inputstring$
    Déclarer target#
    Faible target#, 33
    md5DLL(Addr(inputstring$), target#)
    Retour string$(target#,0)

ENDPROC

Cls
time& = &gettickcount
Imprimer "Ä:                  " + md5("Ä")
Imprimer "ABC:                " + md5("ABC")
Imprimer "test:               " + md5("test")
Imprimer "Hallo monde:         " + md5("Hallo Welt")
Imprimer "1234567890:         " + md5("1234567890")
Imprimer "10.000 Leerzeichen: " + md5(Space$(10000))
imprimer (&gettickcount-time&) + "ms"
Waitinput
FreeDll hDll&
Fin

ou bien entier sans DLL nativ dans XProfan. Beim Compilieren dans XProfan anstatt Profan2CPP devrait qui Compileranweisung im "Proc md5_rl" encore entfernt volonté. cela unsigned right shift <<<, un paire | = Zuweisungen et qui Tilde ~ (Bitwise Not) musste je paraphraser, là es cet dans XProfan pas gibt. je basiere incidemment sur dem C++ Code de Paul Johnston  [...] 
Def md5_tilde(1) (&(1) * (-1) -1)'~
Déclarer md5_x&[524288], md5_hc$
'right shift unsigned >>>

Proc md5_rsu

    Paramètres a&, b&
    Déclarer x&
    x& = a& >> b&

    whileloop 0, b&-1

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

    endwhile

    return x&

ENDPROC

Proc md5_rh

    Paramètres n&
    Déclarer 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

    Paramètres x&, y&
    Déclarer 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

    Déclarer 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
    Paramètres n&,c&
    return& = (n& << c&) | md5_rsu(n&,(32-c&))
     $ENDIF
    return return&

ENDPROC

Proc md5_cm

    Paramètres q&,a&,b&,x&,s&,t&
    Déclarer return&
    return& = md5_ad(md5_rl(md5_ad(md5_ad(a&,q&),md5_ad(x&,t&)),s&),b&)
    return return&

ENDPROC

Proc md5_ff

    Paramètres a&,b&,c&,d&,x&,s&,t&
    Déclarer return&
    return& = md5_cm(((b& & c&) | (md5_tilde(b&) & d&)),a&,b&,x&,s&,t&)
    return return&

ENDPROC

Proc md5_gg

    Paramètres a&,b&,c&,d&,x&,s&,t&
    Déclarer return&
    return& = md5_cm((b& & d&) | (c& & md5_tilde(d&)),a&,b&,x&,s&,t&)
    return return&

ENDPROC

Proc md5_hh

    Paramètres a&,b&,c&,d&,x&,s&,t&
    Déclarer return&
    return& = md5_cm(xor(xor(b&, c&), d&),a&,b&,x&,s&,t&)
    return return&

ENDPROC

Proc md5_ii

    Paramètres a&,b&,c&,d&,x&,s&,t&
    Déclarer return&
    return& = md5_cm(XOR(c&, (b& | md5_tilde(d&))),a&,b&,x&,s&,t&)
    return return&

ENDPROC

Proc md5_sb

    Paramètres x$
    Déclarer 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

    Tandis que 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

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

ENDPROC

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

83 kB
Hochgeladen:11.09.2021
Downloadcounter88
Herunterladen
6 kB
Hochgeladen:11.09.2021
Downloadcounter78
Herunterladen
 
11.09.2021  
 




Sven
Bader
Tricolore encore la fois aktualisiert. qui DLL ist maintenant plus rapide et verarbeitet Umlaute etc. korrekt.
 
13.09.2021  
 




Sven
Bader
j'étais encore la fois tour et habe qui DLL aktualisiert. c'est maintenant possible, Fichiers trop vérifier. cela eignet sich, um beispielsweise Manipulationen ou bien sonstige Beschädigungen à Programmdateien trop vérifier, peux mais un peu dauern.
declare hDll&, text$
let hDll& = @UseDll("md5.dll")
ImportFunc(hDll&,"md5", "md5DLL")
ImportFunc(hDll&,"md5_file", "md5_fileDLL")

Proc md5

    Paramètres inputstring$
    Déclarer target#
    Faible target#, 33
    md5DLL(Addr(inputstring$), target#)
    Retour string$(target#,0)

ENDPROC

Proc md5_file

    Paramètres inputstring$
    Déclarer target#
    Faible target#, 33
    md5_fileDLL(Addr(inputstring$), target#)
    Retour string$(target#,0)

ENDPROC

Cls
declare time&
time& = &gettickcount
Imprimer "a) Zeichenkette \qtest\q:"
Imprimer "098f6bcd4621d373cade4e832627b4f6"
Imprimer md5("test")
Imprimer »
Imprimer "b) Dossier md5.dll:"
Imprimer "fa7a65f6042653776b524d829e5aef2b"
Imprimer md5_file("md5.dll")
Imprimer »
Imprimer "c) 1024 Leerzeichen:"
Imprimer "10801b757893f9edbff42cd92fdd406a"
Imprimer md5(space$(1024))
Imprimer »
Imprimer str$(int(&gettickcount-time&)) + "ms"
Waitinput
FreeDll hDll&
Fin
 
24.02.2023  
 




Georg
Teles
Nabend,

pour Dateiprüfung peux Du eventuell qui Funktion MapFileAndCheckSum verwenden:
DEF MapFileAndCheckSum(3) ! "Imagehlp","MapFileAndCheckSumA"

Proc crc

    Paramètres File$
    Claire Headsum&, Checksum&
    MapFileAndCheckSum(Addr(File$),addr(Headsum&),addr(Checksum&))
    Retour Checksum&

ENDPROC


ou bien ici  [...]  habe Je l' Voir le texte source posté, comment dans Windows cet Funktion berechnet, ici qui blanke Code (dauert aussi beim Effectuer, comme nProc fonctionne es cependant aussi chez grand Fichiers jusqu'à 2 Gb relativ vite, qui Dossier muss comme Ganzes hineingelesen volonté, eignet sich alors pour Fichiers, qui pas entpackt volonté doit comme Bsp., cela était mon intention autrefois pour Manipulationsschutz bzw. CheckSumme dans mon Archivierer):
Set("FileMode",0)
Assign #1,file$
OpenRW #1
BlockRead(#1,ber#,0,size&)
cr2& = cr2(ber#,size&)
Fermer #1

nProc cr2

    Paramètres ber#,ps&
    Déclarer s&,res&
    s& = 0
    res& = 0

    Si ps& MOD 2 = 0

        s& = (ps&\2)-1

    D'autre

        s& = (ps&\2)

    EndIf

    WhileLoop 0,s&

        res& = res&+word(ber#,&loop*2)

        Si res& > 65534

            res& = (res&-65535)

        Endif

    Endwhile

    res& = (res&+ps&)
    Retour res&

ENDPROC


Grüße
Georg
 
Alle Sprachen
TC-Programming [...] 
XProfan 8.0 - 10.0 - X2 - X3 - X4

25.02.2023  
 




Sven
Bader
allô Georg,

qui MapFileAndCheckSumA Funktion ist intéressant et vite genug. qui 32 Bits laisser sich bien comme Integer enlever, qui MD5 Prüfsummen de 128 Bit schleift on plutôt la fois comme String avec, qui sommes ensuite mais aussi sûrement nie doppelt.

qui Entwicklung qui DLL était ausnahmsweise la fois pas aus Eigenbedarf, je hatte simple seulement Amusement daran 2 Gb serait je avec cela maintenant pas vérifier mais inzwischen aller ca. 10 MB pro seconde, qui MapFileAndCheckSumA ist là etwa 10x plus rapide, hat mais aussi moins trop 1faire.

peux du mir dire, welchem Standard deine cr2 Funktion ou bien qui MapFileAndCheckSum avons? je konnte qui Ergebnisse pas validieren, un CRC32 bzw 16 scheint es pas trop son.

Grüße
Sven
 
26.02.2023  
 




Georg
Teles
Hi Sven,

gute Frage, je peux seulement soviel dire, dass cet Funktion une "Restwert" des WORD (2 Bytes) zur Dateigröße addiert, cela Ergebnis ist ensuite qui Checksumme:

WORD 1 et WORD 2 qui Dossier volonté Addiert (alors erste 2 Bytes avec den prochain 2 Bytes), sollte qui Wert juste bzw. sur 65.535 betragen (Max. Wert des WORD), wird cette abgezogen.

trop diesem reste wird cela prochain WORD (2 Bytes) addiert et wieder verglichen et abgezogen, jusqu'à cela Dateiende erreicht ist ... zum Schluss wird dem Ergebnis, alors dem RestWORD, qui Dateigröße addiert. cela Ergebnis ist ensuite qui somme des RestWORD et qui Dateigröße.

le son MS wurde cet Fuktion vers Manipulation ausführbarer Fichiers entwickelt, sodass qui CheckSumme direct dans den En-tête qui EXE Dossier geschrieben wird (beim Kompilieren).

Bedeutet, si on une EXE Dossier avec cette Fuktion abfragt et cet im En-tête qui CheckSumme besitzt, wird cet Fuktion la valeur simple auslesen et ausgeben (bzw. beim Effectuer avec qui Dossier selbst comparer, HeadSum avec CheckSum, si manipuliert wurde) ... si le EXE Dossier aucun CheckSumme besitzt, wird cet berechnet, un comparaison et une annonce bzgl. Manipulation entfällt.

cet Funktion peux on mais aussi sur alle Fichiers anwenden, là qui Berechnung assez vite allez trotz großer Fichiers.

So gesehen hat cet Funktion aucun Norm nehme je à.

Grüße
Georg
 
Alle Sprachen
TC-Programming [...] 
XProfan 8.0 - 10.0 - X2 - X3 - X4

16.03.2023  
 



Zur DLL


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

2.683 Views

Untitledvor 0 min.
Thomas Zielinski28.06.2023
Paul Glatz22.06.2023
E.T.12.06.2023
Wilfried Friebe28.05.2023
plus...

Themeninformationen

cet Thema hat 2 participant:

Sven Bader (4x)
Georg Teles (2x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie