Español
DLL

md5.dll - MD5 Hashes de Cuerdas redactar

 

Sven
Bader
Descargar

¡Hola zusammen,

otra vez möchte Yo una kleine DLL bereitstellen. Ab el 5. DLL erstelle Yo entonces una einzelne con allen Características

Lo dejar se MD5 Prüfsummen de Cuerdas generieren, welche uno bekanntlich para allerhand Zwecke einsetzen kann. Yo habe viel getestet bin me pero la Stabilität y Korrektheit todavía no 100% sicher. Me complace hier also en Feedback!

Viele Grüße
Sven



Hier una Beispielaufruf. Lo braucht una kleine Hilfsfunktion, como Funktionsaufrufe y Rückgaben en DLL Cuerdas sólo como Adresse verarbeiten puede:
declarar hDll&, texto$, time&
let hDll& = @UseDll("md5.dll")
ImportFunc(hDll&,"md5", "md5DLL")

Proc md5

    Parámetros inputstring$
    Declarar target#
    Dim target#, 33
    md5DLL(Addr(inputstring$), target#)
    Volver cadena$(target#,0)

ENDPROC

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

Oder bastante sin DLL nativ en XProfan. Beim Compilieren en XProfan anstatt Profano2CPP debería el Compileranweisung en el "Proc md5_rl" todavía lejos voluntad. Das unsigned right shift <<<, unos pocos | = Zuweisungen y el Tilde ~ (Bitwise Not) musste Yo umschreiben, como lo esta en XProfan no son. Yo basiere de paso en el C++ Code de Paul Johnston  [...] 
Def md5_tilde(1) (&(1) * (-1) -1)'~
Declarar md5_x&[524288], md5_hc$
'right shift unsigned >>>

Proc md5_rsu

    Parámetros a&, b&
    Declarar x&
    x& = a& >> b&

    whileloop 0, b&-1

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

    endwhile

    volver x&

ENDPROC

Proc md5_rh

    Parámetros n&
    Declarar j&, s$
    s$ = ""

    Whileloop 0, 3

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

    Endwhile

    volver s$

ENDPROC

Proc md5_ad

    Parámetros x&, y&
    Declarar l&, m&, return&
    l& = (x& & $FFFF) + (y& & $FFFF)
    m& = (x& >> 16) + (y& >> 16) + (l& >> 16)
    return& = (m& << 16) | (l& & $FFFF)
    volver return&

ENDPROC

Proc md5_rl

    Declarar 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
    Parámetros n&,c&
    return& = (n& << c&) | md5_rsu(n&,(32-c&))
     $ENDIF
    volver return&

ENDPROC

Proc md5_cm

    Parámetros q&,a&,b&,x&,s&,t&
    Declarar return&
    return& = md5_ad(md5_rl(md5_ad(md5_ad(a&,q&),md5_ad(x&,t&)),s&),b&)
    volver return&

ENDPROC

Proc md5_ff

    Parámetros a&,b&,c&,d&,x&,s&,t&
    Declarar return&
    return& = md5_cm(((b& & c&) | (md5_tilde(b&) & d&)),a&,b&,x&,s&,t&)
    volver return&

ENDPROC

Proc md5_gg

    Parámetros a&,b&,c&,d&,x&,s&,t&
    Declarar return&
    return& = md5_cm((b& & d&) | (c& & md5_tilde(d&)),a&,b&,x&,s&,t&)
    volver return&

ENDPROC

Proc md5_hh

    Parámetros a&,b&,c&,d&,x&,s&,t&
    Declarar return&
    return& = md5_cm(xor(xor(b&, c&), d&),a&,b&,x&,s&,t&)
    volver return&

ENDPROC

Proc md5_ii

    Parámetros a&,b&,c&,d&,x&,s&,t&
    Declarar return&
    return& = md5_cm(XOR(c&, (b& | md5_tilde(d&))),a&,b&,x&,s&,t&)
    volver return&

ENDPROC

Proc md5_sb

    Parámetros x$
    Declarar i&, nblk&, return&
    nblk& = ((len(x$) + 8) >> 6) + 1

    Whileloop 0, (nblk&*16 - 1)

        i& = &bucle
        md5_x&[i&] = 0

    Endwhile

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

        i& = &bucle
        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
    volver return&

ENDPROC

Proc md5

    parámetros inputString$
    declarar 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

    Mientras 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

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

ENDPROC

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

83 kB
Hochgeladen:11.09.2021
Ladeanzahl102
Descargar
6 kB
Hochgeladen:11.09.2021
Ladeanzahl91
Descargar
 
11.09.2021  
 




Sven
Bader
Habs una vez más aktualisiert. El DLL es ahora más rápido y verarbeitet Umlaute etc. korrekt.
 
13.09.2021  
 




Sven
Bader
Yo war una vez más dran y habe el DLL aktualisiert. Es ahora posible, Archivos a prüfen. Das eignet se, en por ejemplo Manipulationen oder sonstige Beschädigungen a Programmdateien a prüfen, kann aber una wenig dauern.
declarar hDll&, texto$
let hDll& = @UseDll("md5.dll")
ImportFunc(hDll&,"md5", "md5DLL")
ImportFunc(hDll&,"md5_file", "md5_fileDLL")

Proc md5

    Parámetros inputstring$
    Declarar target#
    Dim target#, 33
    md5DLL(Addr(inputstring$), target#)
    Volver cadena$(target#,0)

ENDPROC

Proc md5_file

    Parámetros inputstring$
    Declarar target#
    Dim target#, 33
    md5_fileDLL(Addr(inputstring$), target#)
    Volver cadena$(target#,0)

ENDPROC

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




Georg
Teles
Nabend,

para Dateiprüfung kannst Usted eventuell el Función MapFileAndCheckSum uso:
DEF MapFileAndCheckSum(3) ! "Imagehlp","MapFileAndCheckSumA"

Proc crc

    Parámetros File$
    Claro Headsum&, Checksum&
    MapFileAndCheckSum(Addr(File$),addr(Headsum&),addr(Checksum&))
    Volver Checksum&

ENDPROC


oder hier  [...]  Yo el Ver código fuente Nuevo, como en Windows esta Función berechnet, hier el blanke Code (dauert auch beim Ausführen, como nProc se ejecuta lo sin embargo auch en großen Archivos a 2 Gb relativ rápidamente, el Expediente muss como Ganzes hineingelesen voluntad, eignet se also para Archivos, el no entpackt voluntad necesario como Bsp., el war mi Intention damals para Manipulationsschutz o. CheckSumme en mi Archivierer):
Conjunto("FileMode",0)
Asignar #1,file$
OpenRW #1
BlockRead(#1,ber#,0,size&)
cr2& = cr2(ber#,size&)
Cerrar #1

nProc cr2

    Parámetros ber#,ps&
    Declarar s&,res&
    s& = 0
    res& = 0

    If ps& MOD 2 = 0

        s& = (ps&\2)-1

    Más

        s& = (ps&\2)

    EndIf

    WhileLoop 0,s&

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

        If res& > 65534

            res& = (res&-65535)

        Endif

    EndWhile

    res& = (res&+ps&)
    Volver res&

ENDPROC


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

25.02.2023  
 




Sven
Bader
¡Hola Georg,

el MapFileAndCheckSumA Función es interessant y rápidamente genug. El 32 Bits dejar se bien como Integer ablegen, el MD5 Prüfsummen de 128 Bit schleift uno más veces como String con, el son entonces aber auch sicher nie doppelt.

El Desarrollo el DLL war ausnahmsweise veces no de Eigenbedarf, Yo hatte simplemente sólo Spaß daran 2 Gb sería Yo así ahora no prüfen aber inzwischen ir ca. 10 MB pro Sekunde, el MapFileAndCheckSumA es como etwa 10x más rápido, ha aber auch weniger a tun.

¿Puede du me sagen, welchem Standard deine cr2 Función o MapFileAndCheckSum haben? Yo podría el Ergebnisse no validieren, una CRC32 o 16 scheint no a ser.

Grüße
Sven
 
26.02.2023  
 




Georg
Teles
Hi Sven,

gute Cuestión, Yo kann sólo soviel sagen, dass esta Función una "Restwert" des WORD (2 Bytes) a Dateigröße addiert, el Ergebnis es entonces el Checksumme:

WORD 1 y WORD 2 el Expediente voluntad Addiert (also erste 2 Bytes con el nächsten 2 Bytes), debería el Valor igual o. encima 65.535 betragen (Max. Valor des WORD), se dieser abgezogen.

Zu diesem Rest se el nächste WORD (2 Bytes) addiert y otra vez verglichen y abgezogen, a el Dateiende erreicht es ... para Schluss es el Ergebnis, also el RestWORD, el Dateigröße addiert. Das Ergebnis es entonces el Summe des RestWORD y Dateigröße.

Laut MS wurde esta Fuktion gegen Manipulation ausführbarer Archivos entwickelt, sodass el CheckSumme direkt en el Encabezamiento el EXE Expediente geschrieben se (beim Kompilieren).

Bedeutet, si uno una EXE Expediente con dieser Fuktion abfragt y esta en el Encabezamiento el CheckSumme besitzt, se esta Fuktion valor simplemente auslesen y ausgeben (o. beim Ausführen con el Expediente incluso vergleichen, HeadSum con CheckSum, si manipuliert wurde) ... si la EXE Expediente no CheckSumme besitzt, se esta berechnet, una Vergleich y una Meldung bzgl. Manipulation entfällt.

Diese Función puede ser aber auch en todos Archivos anwenden, como el Berechnung bastante rápidamente va trotz großer Archivos.

So gesehen ha esta Función no Norm Aprovecho a.

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

16.03.2023  
 




Jens-Arne
Reumschüssel
Es el Checksumme, el para el Erstellung de PE-Archivos (z.B. EXE, DLL) benötigt se. Für 32bit-Images es ellos de Offset 64, el Descripción bajo  [...]  lautet:

"The image file checksum. The algorithm for computing the checksum is incorporated into IMAGHELP.DLL. The following are checked for validation at load time: all drivers, any DLL loaded at boot time, and any DLL that is loaded into a critical Windows process."

Das se "irgendwie" berechnet, pero no como MD5-Hash. Das muss sí ya deshalb así ser, porque se en una MD5-Algorithmus en todo Expediente el Hash verändert, si uno ihn una vez berechnet y luego en el Expediente eingefügt ha. Beim Hashen uno EXE/DLL se also mindestens el Hash incluso ausgelassen (Yo mi aber, auch todavía otro Teile).

Yo glaube de paso no, dass uno con MapFileAndCheckSumA beliebige Archivos verarbeiten kann:

"Passing a Filename parameter that does not point to a valid executable image voluntad produce unpredictable results. Any user of this function is encouraged to make sure that a valid executable image is being passed."

Viele Grüße, Jens-Arne
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
vor 13 Tagen  
 



Zur DLL


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

3.004 Views

Untitledvor 0 min.
ByteAttackGestern (18:50)
E.T. vor 8 Tagen
Roland Schäffer vor 11 Tagen
RudiB. vor 11 Tagen
Más...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie