2012-10-13 3 views
0

Je dois implémenter une fonction de hachage qui produit une valeur de 32 bits (suffisamment unique) pour utiliser un identificateur de message lors de l'envoi d'un message. Je maintiens un numéro de séquence et je continue de l'incrémenter avec d'autres variables et les additionne et je veux obtenir un hachage du total (j'ai l'intention d'utiliser MD5 pour cela et ensuite de choisir les 32 premiers bits de la sortie). Cependant, je vois que la fonction MD5 sous Linux ne prend que l'entrée de chaîne,Hachure MD5 d'une séquence numérique

MD5((unsigned char*)data, strlen(data), result); 

J'ai pensé sprintf'ing la « totale », puis en calculant le hachage, mais je voudrais savoir s'il y a une fonction directement calculer le MD5 de la valeur numérique de «total»?

Répondre

2

unsigned char * n'implique pas une chaîne ou une chaîne terminée par un caractère nul. Au moins pas dans ce contexte. C'est juste un pointeur sur N nombre de mots de 8 bits sans aucune restriction de valeur. Et ainsi, vous ne devez pas avoir snprintf ou quelque chose comme ça afin de convertir vos données en chaînes ASCII. Si cela aide, here est la source de l'outil md5sum.

+0

Merci. Donc pour l'entrée de données binaires, la longueur (2nd arg) devrait-elle être sizeof le type de variable right? –

+0

@ source.rar: Eh bien, il devrait indiquer combien d'octets ce pointeur pointe vers. Si vous passez un pointeur sur 'int', alors ce devrait être' sizeof (int) '. Si vous passez une chaîne ASCII, alors il devrait y avoir un nombre de caractères. Si c'est un tableau, alors taille si le nombre d'éléments dans le tableau multiplie par la taille d'un seul élément de ce tableau. –