Conversion de type de variable [Résolu]

Messages postés
31
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
25 janvier 2010
- - Dernière réponse : cs_ghuysmans99
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
- 26 janv. 2010 à 20:34
Bonjour a tous et à toutes!

Alors voila je suis entrain de coder un programme qui doit utiliser le hash MD5 d'un mot de passe. J'ai trouvé sur le WEB des sources me permettant de calculer ce hash : http://www.faqs.org/rfcs/rfc1321.html

Voila mon problème:
la source du site permet de calculer le hash et le stock dans une variable :

unsigned char [16];

il l'affiche ensuite grâce au code suivant:
static void MDPrint (digest)
unsigned char digest[16];
{

  unsigned int i;

  for (i = 0; i < 16; i++)
 printf ("%02x", digest[i]);
}


Après recherche il me semblerai que le %02x se réfère à un nombre codé en binaire?

Voici ma question comment récupérer le hash calculé sous forme d'un tableau de caractères classique que je pourrai utiliser comme chaine de caractère?

Merci d'avance!

__
S.BARHLI
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
11
3
Merci
Je suis tout à fait d'accord avec BruNews, et c'est de cette façon qu'on procède pour exprimer un MD5 sous forme lisible et imprimable :
char* buf = malloc(sizeof(char)*33);
if (buf == NULL) return 0;
sprintf(buf,"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
        digest[0],digest[1],digest[2],digest[3],digest[4],digest[5],digest[6],
        digest[7],digest[8],digest[9],digest[10],digest[11],digest[12],digest[13],
        digest[14],digest[15]);
printf("%s\n",buf);
free(buf);

Je ne sais pas s'il y a moyen de faire plus simple mais ça devrait fonctionner.
---
VB.NET is good ... VB6 is better

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_ghuysmans99
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
11
0
Merci
sprintf() ?
---
VB.NET is good ... VB6 is better
Commenter la réponse de cs_ghuysmans99
Messages postés
31
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
25 janvier 2010
0
Merci
Ben j'ai cherché dans ce sens mais je n'arrive pas à trouver une syntaxe correcte...
Tu n'aurais pas un ptit exemple?
Commenter la réponse de conservatoire
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
13
0
Merci
"caractères classiques", fallait y penser...
Un 0 on mettrait quoi ?
Un 9 (valeur de TAB) idem ???
etc pour toutes les valeurs d'octets <= 32.

Affiche donc le hash en hexa.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
31
Date d'inscription
mercredi 8 février 2006
Statut
Membre
Dernière intervention
25 janvier 2010
0
Merci
Merci beaucoup a vous deux! ça marche parfaitement !

p.S:
Je n'ai pas bien compris la boutade de BruNews à propos des caractères "classiques" faudra m'expliquer, mon humour informatique est un peu rouillé par contre si vous voulez des blagues de physicien j'en ai quelque une ;)
Commenter la réponse de conservatoire
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
11
0
Merci
BruNews n'a pas tort : les chaines de caractères classiques n'existent pas. Ce sont simplement des tableaux de char terminés par un \0.
---
VB.NET is good ... VB6 is better
Commenter la réponse de cs_ghuysmans99