2009-12-04 7 views
0

Je travaille sur un projet et j'ai quelques problèmes. J'ai cherché mais je ne trouve aucune réponse satisfaisante. J'ai un énorme fichier de 0 et 1s. J'obtiens 1024 bits (mon morceau) dans un morceau de tableau et après cela j'applique la fonction SHA1() qui est implémentée dans la bibliothèque openssl/sha.h.Obtenir le résultat de la fonction OPENSSL SHA1() dans un ARRAY

fragment de caractères [1024]; while ((fgets (morceau, 1024, fp))! = NULL)

Mon intention est que mon dossier peut se composer de même des morceaux et je veux compter combien de morceaux sont identiques.

Après que je reçois 1024 bits dans mon morceau de tableau i appliquer:

unsigned char OBUF [20];

SHA1 (morceau, strlen (morceau), obuf); fonction pour obtenir le résultat de la fonction de hachage.

ici comment fonctionnent SHA1 fonctionne

unsigned char * SHA1 (const unsigned char * d, n unsigned long, unsigned char * md);

après que je veux conserver mon résultat de la fonction de hachage dans un array.After je lis tout mon dossier, je vais utiliser ce tableau pour comparer s'il y a des mêmes résultats de hachage ou non, de cette façon que je peux commencer mon projet.Mais je suis coincé dans ce point. je ne peux pas mettre le résultat obuf à un tableau.

i essayé: memcopy() StrCopy() ou juste myarray [N] [20] = OBUF; etc.

Si vous suggérez un moyen, je serai heureux merci.

alors le plus gros problème est que trouver le nombre de hashs est unique?

Répondre

1

Tout d'abord, vous dites que vos morceaux de fichier d'entrée sont de taille - mais cette ligne va lire au plus caractères de votre fichier (il utilise un espace pour la terminaison null):

char chunk[1024]; while((fgets(chunk,1024,fp))!=NULL) 

(Je pense que fread pourrait bien être plus proche de ce que vous essayez de faire ici)

Deuxièmement, vous pouvez juste faire quelque chose comme:

#define MAX_CHUNKS 1000 

unsigned char chunk[1024]; 
unsigned char obuf[MAX_CHUNKS][20]; 
int chunk_n = 0; 

while (fread(chunk, sizeof chunk, 1, fp) > 0 && chunk_n < MAX_CHUNKS) 
{ 
    SHA1(chunk, sizeof chunk, obuf[chunk_n++]); 
} 

/* Now have chunk_n SHA1s stored in obuf[0] through obuf[chunk_n -1] */ 
+0

Je ne fais que l'essayer, c'est logique. Vous avez raison, cette ligne lira au plus 1023 mais je peux modifier mon problème en le mettant simplement dans un tableau ... – berkay

+0

Vous devrez utiliser la fonction 'memcmp (obuf [i], obuf [j], 20)' pour comparez les hachages. 'memcmp' renverra' 0' si les deux hachages sont égaux. Je pense que vous pourriez avoir besoin de rafraîchir vos bases de C ... – caf

+0

ce n'est pas aussi facile que vous le pensez, parce que je pense que mes hachages sont [5,4,5,4,3,3,2,1,5,2 ] il est difficile d'implémenter la fonction en utilisant memcmp.(débutant en c) – berkay

Questions connexes