MD5 API, LE CELEBRE ALGORITHME DE HACHAGE SOUS DELPHI.
Utilisateur anonyme
-
30 oct. 2006 à 10:38
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 2013
-
29 août 2013 à 10:38
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 29 août 2013 à 10:38
Salut f0xi,
dis moi si je me trompe, mais j'ai l'impression que le resultat de ton calcul de md5 sur des fichiers n'est pas correct. J'ai testé 3 fichiers, et le resultat est différent de celui obtenu avec Indy et avec un outil externe (winMd5Sum), les 2 derniers ayant quant à eux le même résultat.
As-tu verifié les resultats sur un fichier ? Ou est-ce à cause de la facon d'acceder au fichier qui donne un resultat différent ...
Je sais, cette source date pas d'hier, mais je suis étonné que le résultat ne soit pas correct !
cs_max_j
Messages postés1Date d'inscriptionvendredi 12 mars 2004StatutMembreDernière intervention11 avril 2008 11 avril 2008 à 07:58
et pour l'utilisation c'est simple :
tu sauvegardes le hachMD5 et quand l'utilisateur entre son mot de passe tu refais un hach et tu le compares avec celui que tu as sauvegardé
voilà c'est pas plus compliqué que ça :)
JulioDelphi
Messages postés2226Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention18 novembre 201014 10 avril 2008 à 17:59
MD5 n'est pas un cryptage, c'est un hachage, on reviens pas en arrière.
maxjp
Messages postés1Date d'inscriptionjeudi 10 avril 2008StatutMembreDernière intervention10 avril 2008 10 avril 2008 à 17:50
Bonjour,
J'ai bien chargé le code du MD5. Le cryptage d'un mot de passe semble marcher, mais comment à partir du code MD5, reconvertir vers le string d'origine (Delphi) pour être utilisé ?
En vous remerciant pour votre réponse.
Max
cs_altefcat
Messages postés6Date d'inscriptionmardi 27 janvier 2004StatutMembreDernière intervention23 novembre 2007 23 nov. 2007 à 00:12
Bonsoir, j'ai un petit problème avec ton api pour générer le md5 d'un fichier.
En fait, le problème viens à mon avis d'un problème de mémoire ou de type trop petit pour contenir le nombre de bloc du fichier.
Si je fait un test avec un fichier de 0 à 800Mo, pas de problème, l'api me donne bien la string md5 du fichier. Par contre, quand j'éssaye de passer à un fichier de 3 ou 4 gb, j'ai une erreur. Le seul problème, c'est que mon IDE m'affiche le code assembleur et je n'y comprend rien.
Merci d'avance pour votre aide
Pour ceux que ça interesse voici un petit "plugin" qui se greffe au menu contextuel de l'explorer dans les propriétés il ajoute un onglet CheckSums et il est paramétrable :
Rien à voir avec la programmation Delphi je vous l'accorde
c'est juste un utilitaire bien pratique pour contrôler rapidement un CRC16, CRC32, MD5, SHA1
les sources sont fournis avec mais c'est du C++ :(
voilà c'est tout
@+
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 30 oct. 2006 à 14:39
oui, par exemple tu scan tout tes fichiers et tu crée un base de donnée avec les clefs MD5 de chacuns.
il suffirat ensuite de comparer la clef sauvée et la nouvelle clef pour voir si le fichier a été modifié.
pour faire la somme du fichier bonjour.exe de 150Ko on utilise une routine qui permet de couper ces 150000 octets en plusieurs morceaux de 64 octets.
ensuite, on fait la somme MD5 de tout ces morceaux pour generé une clef finale, propre a ce fichier.
l'algorythme MD5 se passe en 3 temps : Initialisation, Mise a jours, Finalisation.
pour un fichier ou tout autre donnée longue ou courte, on commenceras pas initialisé la clef, puis on appeleras une ou plusieurs fois la mise a jours avec chaque bloc de 64 octets et enfin on appel la finalisation qui nous renvois la clef md5.
en pseudo code cela donne :
>>>
initialise( clef )
tant que LongeurBloc est superieur a 64
prendre prochain bloc de 64 octet
MetAJour( clef, Bloc[N] )
decremente( LongeurBloc - 64 )
enfin
renvoyer resultat de finalise( clef )
<<<
sinon regarde le code du MD5Core et tu pourrat peut etre comprendre comment cela fonctionne.
mais c'est assé enorme. meme moi a mon niveau je ne pourrais pas expliquer tout le mecanisme d'un tel algorythme meme si j'en comprend le fonctionnement.
JulioDelphi
Messages postés2226Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention18 novembre 201014 30 oct. 2006 à 14:23
je saisi pas encore tou, passons au concert :
1) je te donne un fichier "bonjour.exe" de 150ko, comment faire sa "somme" ?
2) si on veux verifier un fichier "contaminé par un virus par exemple", il faut auparavant avoir le MD5 du fichier non contaminé n'est ce pas ?
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 30 oct. 2006 à 14:11
un checksum c'est la somme des bits d'un fichier.
par exemple, on peut faire un
CRC16 > renvois la somme dans un entier 16bits non signé
CRC32 > renvois la somme dans un entier 32bits non signé
CRC64 > renvois la somme dans un entier 64bits non signé
MD5 > renvois le hash dans un entier 256bits non signé
MD5 fait un hash, mais on peu appeler cela une somme.
cela permet de verifier l'intégritée des bits d'un fichier, plus ou moins surement.
mais cette somme n'est pas une simple addition de bits. c'est plutot le resultat du hashage des bits selon un algorythme donné (crc, md4, md5, sha, rsa, whirlpool).
cette somme genererat donc une signature unique ou presque, comme une empreinte digitale du fichier.
selon l'algorythme que l'on utiliserat, cette empreinte serat plus ou moins fiable, si on fait une analogie sur les humains cela irait de la couleur des cheveux ou des yeux a l'ADN.
un hash md5 founis par exemple 2^128 clefs possibles.
plus la clef serat longue, plus la signature serat unique. cela permet egalement de limiter le nombre de collisions.
une clef 512bits est logiquement inviolable car le moindre petit bit modifié genererer une clef totalement differente, on peu donc verifier d'une maniere fiable l'integrité d'un fichier (contaminé par un virus par exemple).
ici le md5 coupe le fichier en plusieurs morceaux de 64bits, puis il crée nouvelle clef a partir du dernier morceau lut.
[clef 1 = morceau 1] > [clef 2 = clef 1 + morceau 2] > [clef 3 = clef 2 + morceau 3] et ainsi de suite.
si un bit a été modifié quelque part, la clef finale serat totalement differente car MD5 est prevus pour faire de grand ecart pour des valeur proche.
exemple :
A $41 7fc56270e7a70fa81a5935b72eacbe29
B $42 9d5ed678fe57bcca610140957afab571
AB $4142 b86fc6b051f63d73de262d4c34e3a0a9
exemple concret : protéger des sauvegarde de jeux avec un tel systeme, pour eviter les cheats.
JulioDelphi
Messages postés2226Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention18 novembre 201014 30 oct. 2006 à 13:07
foxi, quand on dit "une somme d'un fichier" c'est la somme de quoi ? j'ai jamais compris ça >< *sight*
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 30 oct. 2006 à 12:13
ah aussi, pour l'instant rien est prevus encore, mais j'ai dans l'idée de fournir d'autres algorythmes notement SHA, RSA et WhirlPool.
mais le problemes des hash superieur a 256bits est le stockage.
d'ailleur je conseil pour le stockage des clefs MD5 d'utiliser le format TMD5Data plutot que String. mieux vaut stocker 16 octets que 32.
la demo fournie avec la source peut etre utilisée pour verifier la somme MD5 des fichiers telechargés sur le net.
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 30 oct. 2006 à 12:07
salut cirec :)
j'avais zappé le niveau... car l'utilisation reste trés trés simple. meme si seul les initiés savent pourquoi il faut utiliser un tel algorythme et ses fonctions.
les methodes de Swap et Reverse ne sont pas officielle. Leurs utilisation est donc reservée au choix de l'utilisateur.
Par defaut un MD5 est toujours en minuscule, jamais en majuscules.
mais un simple UpperCase ou LowerCase suffiront.
Certain me diront que MD5 est declaré non sur depuis 2004 car on aurait decouvert des collisions complete. Seulement ces collisions sont faites dans des conditions telle qu'on peu douter de la credibilitée d'une telle affirmation.
Certe les collisions existe, mais elles reste trés trés rare et sont generalement provoquée volontairement, difficile a realisée et obtenir de surcroit.
Le MD5 peut etre cassé uniquement en brute force. Mais necessite un dictionnaire de plusieurs GigaOctets et peu prendre plusieurs heures.
il reste neanmoins un trés bon algorythme de hash, assé securisant et qui rebuteras les petits crackers/lamers inexperimentés.
et en effet, on devrait toujours mettre des mots de passe alphanumerique d'au moins 5-6 caracteres, cela offre une securitée suplementaire et resistante au brute force.
29 août 2013 à 10:38
dis moi si je me trompe, mais j'ai l'impression que le resultat de ton calcul de md5 sur des fichiers n'est pas correct. J'ai testé 3 fichiers, et le resultat est différent de celui obtenu avec Indy et avec un outil externe (winMd5Sum), les 2 derniers ayant quant à eux le même résultat.
As-tu verifié les resultats sur un fichier ? Ou est-ce à cause de la facon d'acceder au fichier qui donne un resultat différent ...
Je sais, cette source date pas d'hier, mais je suis étonné que le résultat ne soit pas correct !
11 avril 2008 à 07:58
A+
Max
10 avril 2008 à 22:33
tu sauvegardes le hachMD5 et quand l'utilisateur entre son mot de passe tu refais un hach et tu le compares avec celui que tu as sauvegardé
voilà c'est pas plus compliqué que ça :)
10 avril 2008 à 17:59
10 avril 2008 à 17:50
J'ai bien chargé le code du MD5. Le cryptage d'un mot de passe semble marcher, mais comment à partir du code MD5, reconvertir vers le string d'origine (Delphi) pour être utilisé ?
En vous remerciant pour votre réponse.
Max
23 nov. 2007 à 00:12
En fait, le problème viens à mon avis d'un problème de mémoire ou de type trop petit pour contenir le nombre de bloc du fichier.
Si je fait un test avec un fichier de 0 à 800Mo, pas de problème, l'api me donne bien la string md5 du fichier. Par contre, quand j'éssaye de passer à un fichier de 3 ou 4 gb, j'ai une erreur. Le seul problème, c'est que mon IDE m'affiche le code assembleur et je n'y comprend rien.
Merci d'avance pour votre aide
25 nov. 2006 à 00:15
http://www.earthmagic.org/?software
Rien à voir avec la programmation Delphi je vous l'accorde
c'est juste un utilitaire bien pratique pour contrôler rapidement un CRC16, CRC32, MD5, SHA1
les sources sont fournis avec mais c'est du C++ :(
voilà c'est tout
@+
30 oct. 2006 à 14:39
il suffirat ensuite de comparer la clef sauvée et la nouvelle clef pour voir si le fichier a été modifié.
pour faire la somme du fichier bonjour.exe de 150Ko on utilise une routine qui permet de couper ces 150000 octets en plusieurs morceaux de 64 octets.
ensuite, on fait la somme MD5 de tout ces morceaux pour generé une clef finale, propre a ce fichier.
l'algorythme MD5 se passe en 3 temps : Initialisation, Mise a jours, Finalisation.
pour un fichier ou tout autre donnée longue ou courte, on commenceras pas initialisé la clef, puis on appeleras une ou plusieurs fois la mise a jours avec chaque bloc de 64 octets et enfin on appel la finalisation qui nous renvois la clef md5.
en pseudo code cela donne :
>>>
initialise( clef )
tant que LongeurBloc est superieur a 64
prendre prochain bloc de 64 octet
MetAJour( clef, Bloc[N] )
decremente( LongeurBloc - 64 )
enfin
renvoyer resultat de finalise( clef )
<<<
sinon regarde le code du MD5Core et tu pourrat peut etre comprendre comment cela fonctionne.
mais c'est assé enorme. meme moi a mon niveau je ne pourrais pas expliquer tout le mecanisme d'un tel algorythme meme si j'en comprend le fonctionnement.
30 oct. 2006 à 14:23
1) je te donne un fichier "bonjour.exe" de 150ko, comment faire sa "somme" ?
2) si on veux verifier un fichier "contaminé par un virus par exemple", il faut auparavant avoir le MD5 du fichier non contaminé n'est ce pas ?
30 oct. 2006 à 14:11
par exemple, on peut faire un
CRC16 > renvois la somme dans un entier 16bits non signé
CRC32 > renvois la somme dans un entier 32bits non signé
CRC64 > renvois la somme dans un entier 64bits non signé
MD5 > renvois le hash dans un entier 256bits non signé
MD5 fait un hash, mais on peu appeler cela une somme.
cela permet de verifier l'intégritée des bits d'un fichier, plus ou moins surement.
mais cette somme n'est pas une simple addition de bits. c'est plutot le resultat du hashage des bits selon un algorythme donné (crc, md4, md5, sha, rsa, whirlpool).
cette somme genererat donc une signature unique ou presque, comme une empreinte digitale du fichier.
selon l'algorythme que l'on utiliserat, cette empreinte serat plus ou moins fiable, si on fait une analogie sur les humains cela irait de la couleur des cheveux ou des yeux a l'ADN.
un hash md5 founis par exemple 2^128 clefs possibles.
plus la clef serat longue, plus la signature serat unique. cela permet egalement de limiter le nombre de collisions.
une clef 512bits est logiquement inviolable car le moindre petit bit modifié genererer une clef totalement differente, on peu donc verifier d'une maniere fiable l'integrité d'un fichier (contaminé par un virus par exemple).
ici le md5 coupe le fichier en plusieurs morceaux de 64bits, puis il crée nouvelle clef a partir du dernier morceau lut.
[clef 1 = morceau 1] > [clef 2 = clef 1 + morceau 2] > [clef 3 = clef 2 + morceau 3] et ainsi de suite.
si un bit a été modifié quelque part, la clef finale serat totalement differente car MD5 est prevus pour faire de grand ecart pour des valeur proche.
exemple :
A $41 7fc56270e7a70fa81a5935b72eacbe29
B $42 9d5ed678fe57bcca610140957afab571
AB $4142 b86fc6b051f63d73de262d4c34e3a0a9
exemple concret : protéger des sauvegarde de jeux avec un tel systeme, pour eviter les cheats.
30 oct. 2006 à 13:07
30 oct. 2006 à 12:13
mais le problemes des hash superieur a 256bits est le stockage.
d'ailleur je conseil pour le stockage des clefs MD5 d'utiliser le format TMD5Data plutot que String. mieux vaut stocker 16 octets que 32.
la demo fournie avec la source peut etre utilisée pour verifier la somme MD5 des fichiers telechargés sur le net.
30 oct. 2006 à 12:07
j'avais zappé le niveau... car l'utilisation reste trés trés simple. meme si seul les initiés savent pourquoi il faut utiliser un tel algorythme et ses fonctions.
les methodes de Swap et Reverse ne sont pas officielle. Leurs utilisation est donc reservée au choix de l'utilisateur.
Par defaut un MD5 est toujours en minuscule, jamais en majuscules.
mais un simple UpperCase ou LowerCase suffiront.
Certain me diront que MD5 est declaré non sur depuis 2004 car on aurait decouvert des collisions complete. Seulement ces collisions sont faites dans des conditions telle qu'on peu douter de la credibilitée d'une telle affirmation.
Certe les collisions existe, mais elles reste trés trés rare et sont generalement provoquée volontairement, difficile a realisée et obtenir de surcroit.
Le MD5 peut etre cassé uniquement en brute force. Mais necessite un dictionnaire de plusieurs GigaOctets et peu prendre plusieurs heures.
il reste neanmoins un trés bon algorythme de hash, assé securisant et qui rebuteras les petits crackers/lamers inexperimentés.
et en effet, on devrait toujours mettre des mots de passe alphanumerique d'au moins 5-6 caracteres, cela offre une securitée suplementaire et resistante au brute force.