2009-12-27 6 views
0

que je suis l'exemple de code disponibles dans: http://www.openssl.org/docs/crypto/sha.html#en utilisant libcrypto pour copier hachage tableau de caractères

Après les suivantes:

EVP_DigestFinal_ex(&mdctx, md_value, &md_len); 

le résumé final est stocké dans md_value. J'aimerais copier ce résumé dans un autre tableau de caractères de taille égale. C'est un problème en deux parties cependant. Je ne comprends pas ce qui est exactement stocké dans md_value, ressemble à binaire. Le printf suivant formate les données à six pans de sortie, ce qui est ce que je dois .. une version finale de chaîne du hachage impliquée (dans une boucle où i est le contexte:

printf("val: %02x\n", md_value[i]); 

Ma question est, comment puis-je copier seulement . les valeurs hexagonales à un autre tableau de caractères, voici ce que j'ai essayé jusqu'à présent, ce qui est terrible dans la mesure où un exemple va:

for(i = 0; i < md_len; i++) { 
    unsigned char c; 
    printf("val: %02x\n", md_value[i]); 
    sprintf(c, "%02x", md_value[i]); 
    h[0] = c; 
} 

h dans ce cas est là où je veux que les caractères hexadécimaux copié est. un tableau de caractères qui ressemble à:

unsigned char h[EVP_MAX_MD_SIZE]; 

Répondre

2

Je ne suis pas sûr de votre question si vous voulez copier les données brutes ou créer une chaîne textuelle formatée.

Quoi qu'il en soit, pour copier les données brutes, memcpy est ce que vous voulez:

unsigned char *copy = malloc(md_len); 
memcpy(copy, md_value, md_len); 

Si vous voulez créer une chaîne formatée, qui est quand vous avez besoin sprintf:

// each byte needs two chararacters for display plus 1 for terminating NULL 
char *formatted = malloc(md_len * 2 + 1); 

for (idx = 0; idx < md_len; ++idx) 
{ 
    sprintf(formatted + idx * 2, "%02x", md_value[idx]); 
} 
+0

curieux, comment formaté + idx * 2 travail? pour chaque index, il laisse essentiellement la place à deux personnages? – randombits