Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
713 connectés 

  FORUM HardWare.fr
  Programmation
  C

  md5

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

md5

n°1256827
meumeul
Stay Heavy
Posté le 01-12-2005 à 14:23:05  profilanswer
 

bonjour, j'implémente un protocole sur tcp/ip, au quel je voudrais rajouter un petit controle sur les bit...
Un crc ou mieux, un md5. je cherche une libraire trés simple pour faire cela, je n'en ai trouvé que des
compliqués. En connaissez vous un simple ? je précise que je ne cherche pas l'efficacité, c'est juste  
une question pédagogique ...
 
Merci, bonne journée (ou soirée pour les accrocs ;))

mood
Publicité
Posté le 01-12-2005 à 14:23:05  profilanswer
 

n°1257136
hoty
Posté le 01-12-2005 à 21:56:01  profilanswer
 

http://www.faqs.org/rfcs/rfc1321.html
 
Il y les sources de global.h, md5.h, md5c.c. Ca fournit trois fonctions :
MD5Init, MD5Update, MD5Final
 
Et un fichier mddriver.c qui monre comment ca marche.

n°1257139
matafan
Posté le 01-12-2005 à 22:11:36  profilanswer
 

TCP gere deja les erreurs de transmission.

n°1257422
Taz
bisounours-codeur
Posté le 02-12-2005 à 12:39:17  profilanswer
 

et IP aussi.
sinon y a openssl aussi, et des tas de bibli qui font ça.

n°1257441
meumeul
Stay Heavy
Posté le 02-12-2005 à 13:13:38  profilanswer
 

Merci Hoty , ca m'a l'air d'etre totalement ce que je cherchais.
Oui tcp/ip gèrent déjà les erreus, le md5 ne me servira ici
concrétement à rien... C'est juste un point pédagogique :)
 
Merci pour vos réponses, je teste ces fonctions ce soir.

n°1257466
Sve@r
Posté le 02-12-2005 à 13:44:43  profilanswer
 

meumeul a écrit :

Oui tcp/ip gèrent déjà les erreus, le md5 ne me servira ici
concrétement à rien...


 
tcp/ip gère les erreurs au niveau du protocole. Mais il est possible que l'info transmise soit modifiée en cours de transfert. C'est pour ça que sur les gros fichiers offerts en download (comme la distrib Mandrake par exemple) sont associés la signature MD5 qui permet de vérifier l'intégrité du fichier téléchargé.
 


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1257673
blackgodde​ss
vive le troll !
Posté le 02-12-2005 à 16:42:49  profilanswer
 

Taz a écrit :

et IP aussi.
sinon y a openssl aussi, et des tas de bibli qui font ça.


 
ah  :heink:  
me semblait qu'il y avait un checksum sur l'en-tête ip seulement, ce que je n'appelle pas une 'gestion des erreurs de transmission'. Il y aurait donc autre chose ?


---------------
-( BlackGoddess )-
n°1257727
matafan
Posté le 02-12-2005 à 18:16:39  profilanswer
 

Non tu as raison, IP ne gere pas les alterations de la "charge utile" des packets. D'ailleurs c'est pour ca que si tu fais de l'UDP (sur IP donc), il faut gerer les erreurs au niveau applicatif. Par contre TCP detecte les alterations de la charge utile des packet. Par contre c'est vrai que le checksum de TCP est relativement faible, donc ca n'est pas completement inutile de faire quelque chose de plus robuste.

n°1261936
meumeul
Stay Heavy
Posté le 08-12-2005 à 17:17:40  profilanswer
 

hoty a écrit :

http://www.faqs.org/rfcs/rfc1321.html
 
Il y les sources de global.h, md5.h, md5c.c. Ca fournit trois fonctions :
MD5Init, MD5Update, MD5Final
 
Et un fichier mddriver.c qui monre comment ca marche.


 
coucou
encore merci pour ce source qui a l'air pas mal.
mais je suis surement trés bête j'arrive pas à a le compiler :S
 

Code :
  1. gcc -c md5.c
  2. md5.c:81: error: erreur de syntaxe before '+=' token
  3. md5.c: Dans la fonction « MD5Transform »:
  4. md5.c:340: error: erreur de syntaxe at end of input
  5. make: *** [md5.o] Erreur 1


 
il faut modifier quelque chose ?

n°1264011
meumeul
Stay Heavy
Posté le 11-12-2005 à 16:26:42  profilanswer
 

up

mood
Publicité
Posté le 11-12-2005 à 16:26:42  profilanswer
 

n°1264015
Ace17
Posté le 11-12-2005 à 16:32:56  profilanswer
 

Ca tombe dans cette partie la :

Code :
  1. /* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
  2. Rotation is separate from addition to prevent recomputation.
  3. */
  4. #define FF(a, b, c, d, x, s, ac) { \
  5. (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
  6. (a) = ROTATE_LEFT ((a), (s)); \
  7. (a) += (b); \
  8.   }
  9. #define GG(a, b, c, d, x, s, ac) { \
  10. (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
  11. (a) = ROTATE_LEFT ((a), (s)); \
  12. (a) += (b); \
  13.   }
  14. #define HH(a, b, c, d, x, s, ac) { \
  15. (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
  16. (a) = ROTATE_LEFT ((a), (s)); \
  17. (a) += (b); \
  18.   }
  19. #define II(a, b, c, d, x, s, ac) { \
  20. (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
  21. (a) = ROTATE_LEFT ((a), (s)); \
  22. (a) += (b); \
  23.   }


 
Y'avait une ligne vide juste avant un (a) += (b), faut la virer

n°1264293
Sve@r
Posté le 12-12-2005 à 09:58:59  profilanswer
 

Ace17 a écrit :

Ca tombe dans cette partie la :

Code :
  1. /* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
  2. Rotation is separate from addition to prevent recomputation.
  3. */
  4. #define FF(a, b, c, d, x, s, ac) { \
  5. (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
  6. (a) = ROTATE_LEFT ((a), (s)); \
  7. (a) += (b); \
  8.   }
  9. #define GG(a, b, c, d, x, s, ac) { \
  10. (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
  11. (a) = ROTATE_LEFT ((a), (s)); \
  12. (a) += (b); \
  13.   }
  14. #define HH(a, b, c, d, x, s, ac) { \
  15. (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
  16. (a) = ROTATE_LEFT ((a), (s)); \
  17. (a) += (b); \
  18.   }
  19. #define II(a, b, c, d, x, s, ac) { \
  20. (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
  21. (a) = ROTATE_LEFT ((a), (s)); \
  22. (a) += (b); \
  23.   }


 
Y'avait une ligne vide juste avant un (a) += (b), faut la virer


 
 
Pas obligé... mais en revanche CHAQUE ligne placée entre le début du "#define" et la fin "}" doit se terminer par un backslash pour que le compilo ne voie qu'une seule ligne. En effet, l'instruction "#define"  doit impérativement s'écrire sur une seule ligne donc si on l'écris sur plusieurs (lisibilité du code), il faut masquer le caractère "fin de ligne" par un backslash.

Message cité 1 fois
Message édité par Sve@r le 12-12-2005 à 09:59:35

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1264364
meumeul
Stay Heavy
Posté le 12-12-2005 à 11:58:57  profilanswer
 

J'ai viré la ligne vide et ca marche, merci.

n°1264832
Ace17
Posté le 12-12-2005 à 19:06:32  profilanswer
 

Sve@r a écrit :

Pas obligé...

Pardon, il suffit de la virer [:itm]

n°1264867
meumeul
Stay Heavy
Posté le 12-12-2005 à 19:52:12  profilanswer
 

Ok , j'ai réussi a faire ça :  
 

Code :
  1. MD5 ("bonjour" ) =
  2. 6f3767a5232c66df9a1e5a88a2355400


 
Mais en fait, je me pose la question ...
J'envoie des paquets de n octets à un client. Comment le client vérifie si le paquet qu'il a recu est juste ?
( car le chemin inverse n'existe pas)
Il faut donc que j'envoie aussi ce code, non ? mais si j'envoie le code, il peut aussi y avoir des erreurs dessus...
 
en fait .... je sais pas vraiment  comment l'utiliser


Message édité par meumeul le 12-12-2005 à 20:26:18
n°1264889
Ace17
Posté le 12-12-2005 à 20:53:35  profilanswer
 

De toutes facons tu ne pourras jamais etre sur a 100% que ce que le client a recu est juste. Mais si tu balances les donnees et le md5, evidemment il peut y avoir des erreurs sur les deux, mais si les erreurs tombent de maniere a ce que le paquet corresponde encore au md5 transmis, c'est que tu as vraiment pas de bol!  
Dans la pratique les erreurs vont modifier ton paquet "un peu". Mais quand un paquet change "un peu", le md5 associe a ce paquet change "beaucoup". Donc si ton md5 transmis est lui aussi faux, il y a tres tres peu de chances qu'il ait change de maniere a toujours correspondre au paquet.

n°1264895
meumeul
Stay Heavy
Posté le 12-12-2005 à 21:03:41  profilanswer
 

ok, donc j'envoi  données|md5
a la reception, si getMd5(donnée) == md5
alors j'accepte le paquet, sinon je le redemande.
Le truc c'est que c'est gros un md5 ! j'ai interet a envoyer des gros paquets.
enfin des pas trop petits. Il y'a un ration de données par rapport a la taille du md5 conseillé ? normé? car il fait quand meme 32 octets le joli

n°1264913
KangOl
Profil : pointeur
Posté le 12-12-2005 à 21:34:09  profilanswer
 

non le md5 fait tout le temps 32 caractères


---------------
Nos estans firs di nosse pitite patreye...
n°1264919
meumeul
Stay Heavy
Posté le 12-12-2005 à 21:45:42  profilanswer
 

ok donc pas de norme conseillé pour la taille des données pour UN md5 .
genre une paquet de 1024 octets pour 32 octets de md5 ?

n°1264921
KangOl
Profil : pointeur
Posté le 12-12-2005 à 21:50:42  profilanswer
 

oui..


---------------
Nos estans firs di nosse pitite patreye...
n°1265048
meumeul
Stay Heavy
Posté le 12-12-2005 à 22:47:15  profilanswer
 

mdr, ok, merci, désolé pour les questions à la con :)

n°1265296
red factio​n
Posté le 13-12-2005 à 11:03:29  profilanswer
 

KangOl a écrit :

non le md5 fait tout le temps 32 caractères


le md5 fait une empreinte 128 bit, bon ca fait aussi 32 caractéres si on l'affiche mais je vois mal qqn transmettre 32 caracteres pour faire le test (32 bytes*8 => 256 bit au lieu de 128...)

Message cité 1 fois
Message édité par red faction le 13-12-2005 à 11:18:52
n°1265343
Sve@r
Posté le 13-12-2005 à 11:36:45  profilanswer
 

Ace17 a écrit :

De toutes facons tu ne pourras jamais etre sur a 100% que ce que le client a recu est juste. Mais si tu balances les donnees et le md5, evidemment il peut y avoir des erreurs sur les deux, mais si les erreurs tombent de maniere a ce que le paquet corresponde encore au md5 transmis, c'est que tu as vraiment pas de bol !
Dans la pratique les erreurs vont modifier ton paquet "un peu". Mais quand un paquet change "un peu", le md5 associe a ce paquet change "beaucoup".


1 bit passant de "0" à "1" ou l'inverse change TOUTE la signature MD5
 

Ace17 a écrit :

Donc si ton md5 transmis est lui aussi faux, il y a tres tres peu de chances qu'il ait change de maniere a toujours correspondre au paquet.


Ca s'appelle une "collision".
A ma connaissance, la seule collision md5 jamais enregistrée a été créée artificiellement au japon en août 2004.
Artificiellement parce que le la seconde chaîne donnant le même MD5 que la première a été créée de toute pièces par les chercheurs et mathématiciens japonais.


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1265655
red factio​n
Posté le 13-12-2005 à 16:33:40  profilanswer
 

les collisions sont tres facile a reproduire
il suffit de rajouter un block binaire bien specifique a deux fichier  (identique pour les 2)
 
on fait le md5 des 2 fichiers.... magie c identique  :ange:  
 
enfait ce block annule le resultat un peut comme le fait de multiplier par 0 donne tjs 0 peut importe les resultats precedents

n°1265818
meumeul
Stay Heavy
Posté le 13-12-2005 à 19:12:28  profilanswer
 

red faction a écrit :

le md5 fait une empreinte 128 bit, bon ca fait aussi 32 caractéres si on l'affiche mais je vois mal qqn transmettre 32 caracteres pour faire le test (32 bytes*8 => 256 bit au lieu de 128...)


 
en fait ca donne 32 caractères
   1. MD5 ("bonjour" ) =
   2. 6f3767a5232c66df9a1e5a88a2355400
 
Mais c'est de l'hexa, autant pour moi, j'ai pas reflechi j'ai pris ca pour des caractères
sur 8 bits chacun ... un hexa codé sur 4 bits donc
ca fait 4 * 32 = 128. bien vu ;)

n°1266108
Sve@r
Posté le 14-12-2005 à 09:21:50  profilanswer
 

red faction a écrit :

les collisions sont tres facile a reproduire
il suffit de rajouter un block binaire bien specifique a deux fichier  (identique pour les 2)
 
on fait le md5 des 2 fichiers.... magie c identique  :ange:  
 
enfait ce block annule le resultat un peut comme le fait de multiplier par 0 donne tjs 0 peut importe les resultats precedents


 
J'aimerais bien récupérer ce bloc...

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  md5

 

Sujets relatifs
[MySQL][MD5][Java] Fonction de "déhashage"crypt(), MD5() et htpasswd
Problème MD5Utilisation fonction md5crypt (ou crypter en md5 unix)
Authentification avec du hashage(md5) et un chalengeprobleme avec md5 et ma session [RESOLU]
Cherche algo de md5Brute Force MD5 en Delphi, c'est possible ;)
crpytage md5 - formulaire method POSTPeut on décrypter un mdp en md5 ???
Plus de sujets relatifs à : md5


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR