J'essaie d'obtenir un sha-1 pour un certain nombre de fichiers. Ce que je fais actuellement est le cycle des fichiers dans un chemin donné, ouvrir et lire chaque fichier séparément et charger le contenu dans un tampon, puis l'envoyer à la fonction SHA de openssl pour obtenir le hachage. Le code ressemble à ceci:Obtenir correctement sha-1 pour les fichiers en utilisant openssl
void ReadHashFile(LPCTSTR name)
{
FILE * pFile;
long lSize;
char * buffer;
size_t result;
pFile = _tfopen (name , L"rb");
if (pFile==NULL) {fputs ("File error",stderr); return;}
// obtain file size:
fseek (pFile , 0 , SEEK_END);
lSize = ftell (pFile);
rewind (pFile);
if(lSize == -1){fputs ("Read Error",stderr);return;}
// allocate memory to contain the whole file:
buffer = (char*) malloc (sizeof(char)*lSize);
if (buffer == NULL) {fputs ("Memory error",stderr); return;}
// copy the file into the buffer:
result = fread (buffer,1,lSize,pFile);
if (result != lSize) {fputs ("Reading error",stderr); return;}
/* the whole file is now loaded in the memory buffer. */
// terminate
fclose (pFile);
//Do what ever with buffer
unsigned char ibuf[] = "compute sha1";
unsigned char obuf[20];
SHA1((const unsigned char*)buffer, strlen((const char*)buffer), obuf);
fwprintf(stderr, L"file %s\n", name);
int i;
for (i = 0; i < 20; i++) {
printf("%02x ", obuf[i]);
}
printf("\n");
free(buffer);
}
Certains fichiers semblent être illisibles, certains me donnent une taille -1 autres que je ne peux que lire les 2-3 premiers octets qui donne beaucoup de fichiers même sha même si ils sont différents.
J'apprécierais si quelqu'un peut m'aider avec ceci ou si n'importe qui a l'expérience dans le hachage de dossier. Oh, et s'il existe un moyen d'obtenir le fichier sha1 d'un fichier sans avoir à charger le fichier entier en mémoire en premier, je veux dire en considérant les fichiers volumineux, cette solution ne marchera pas.
Cordialement
+1 pour l'explication analytique. –