Md5 api, le celebre algorithme de hachage sous delphi.

Soyez le premier à donner votre avis sur cette source.

Vue 20 331 fois - Téléchargée 2 719 fois


Description

Salut,

cette fois on passe au choses serieuses.

je vous propose donc l'API MD5, qui permet donc d'avoir accés facilement a cet algorythme
de cryptage.

L'api se decoupe en Deux fichier :

MD5Api, qui est l'unité a declarer pour utiliser les fonctions.
MD5Core, qui contient l'agorythme (a ne pas modifier sinon ... ça marche plus).

Au depart j'avais recupéré une petite unité d'un auteur dont je n'arrive plus a me souvenir,
bref, aprés quelques fortes modifications et optimisations, j'ai ensuite ajouter plusieurs
choses utiles.

L'Api contient donc :

des fonctions qui genere des clef MD5 (string) a partir de chaines de caracteres, donnée non typée,
et fichiers.
d'autre fonctions permettent de faire des convertions, comparaisons ect...

voila, et que je ne vous vois plus mettre des identifiants d'accés en clair dans des fichiers INI,
registre et bases de données, la vous n'avez plus d'excuses.

Source / Exemple :


{ Renvois la representation du MD5 d'une chaine de caracteres }
function MD5(const S : string) : string; overload;
{ Renvois la representation du MD5 d'un buffer quelquonque }
function MD5(const Buffer; const Len: integer): string; overload;
{ REnvois la representation du MD5 d'un fichier }
function MD5FromFile(const FileName : string) : string;

{ Renvois une donnée MD5 d'une chaine de caracteres }
function MD5DataFromString(const S : string) : TMD5Data;
{ Renvois une donnée MD5 d'un buffer quelquonque }
function MD5DataFromBuffer(const Buffer; const Len: integer) : TMD5Data;
{ Renvois une donnée MD5 d'un fichier }
function MD5DataFromFile(const FileName: string): TMD5Data;

{ Convertis une donnée MD5 vers une chaine de caracteres }
function MD5DataToStr(const Data : TMD5Data) : string;
{ Convertis une chaine de caracteres representant un MD5 vers une donnée MD5 } 
function MD5StrToMD5Data(const S : String) : TMD5Data;

{ Verifie la validitée d'une chaine representant un MD5 }
function MD5StrCheck(const S : string) : boolean;
{ Compare deux données MD5 }
function MD5Equal(const A, B: TMD5Data) : Boolean;
{ Compare deux données MD5 grace a CompareMem }
function MD5MemEqual(const A, B : TMD5Data) : boolean;

{ Inverse le sens des données d'une donnée MD5 }
function MD5Reverse(const Data : TMD5Data) : TMD5Data;
{ Inverse l'ordre des octets Pair et Impair d'une donnée MD5 }
function MD5OddSwap(const Data : TMD5Data) : TMD5Data;

Conclusion :


Aucuns tests de performances n'a été effectué pour le moment, mais les routines sont assé
rapide.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 37
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.
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 37
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.
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
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és 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 37
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és 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
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 ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.