Bonjour ,

Pour une raison que j'ignore j'ai toujours le même hash avec la fonction ci dessous lorsque j'essai de faire un hash d un fichier d'archive .7z :
Ma fonction fonctionne bien pour le hash d'un fichier .txt mais pas avec un fichier archive .7z pourtant je n'ai pas de message d'erreur
Pourquoi cela ne fonctionne pas avec une archive.7z?
Avez vous svp des conseils ?

Merci.



m_NameFile correspond au chemin du fichier , par exemple c:\\dossier\\archive.7z
m_NameFileHash correspond au chemin vers le fichier de hash sha512 qui sera généré

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
bool bHashDone = false;
	std::ofstream fileHash;
	std::ifstream file;
 
   if( NULL != m_NameFile.c_str() )
   {
      try
      {
		  SystemConfiguration::COutilsCommun::OpenOStream(fileHash,m_NameFileHash.c_str());
		  SystemConfiguration::COutilsCommun::OpenIStream(file, m_NameFile.c_str());
 
		  std::ofstream fileHash( m_NameFileHash.c_str(), std::ofstream::out|std::ofstream::trunc );
         std::ifstream file( m_NameFile.c_str() );
         // if std::ifstream file is huge ( I have one error then I must read the 
         if(!file)
         {
			 std::cout << "impossible d'ourvrir le fichier : " << m_NameFile.c_str() <<std::endl;
			 std::cout << "taille du fichier : " << file.tellg() <<std::endl;
         }      
		 if(!fileHash)
		 {
			 std::cout << "impossible de creer le fichier : " << m_NameFileHash.c_str() <<std::endl;
		 }   
 
         unsigned char digest[SHA512_DIGEST_LENGTH];
         std::string mdString(SHA512_DIGEST_LENGTH*2,' ');
         std::stringstream buffer; //// variable with the content of the file 
 
         if( (file)&& (fileHash) )
         {			
            buffer << file.rdbuf();
            SHA512_CTX ctx;
            SHA512_Init( &ctx );
            SHA512_Update( &ctx, buffer.str().c_str(), strlen(buffer.str().c_str()) );
            SHA512_Final(digest, &ctx);
 
            char* bufInStr = const_cast<char*>(mdString.data()); 
            for ( int i = 0 ; i < SHA512_DIGEST_LENGTH ; ++i ) {
               // FYI : don't use sprintf_s() because  \0 can't be inside std::string
               const char tabCaractHexa[] = "0123456789abcdef";
               int valueToConvert = digest[i];
               int first = (valueToConvert >> 4) & 0xF; 
               int second  = valueToConvert & 0xF;      
               bufInStr[i*2]   = tabCaractHexa[first];  
               bufInStr[i*2+1] = tabCaractHexa[second];
            }
			bHashDone = true;
            fileHash << mdString;
            std::cout <<"SHA512 digest of  " << m_NameFile.c_str() << " is "<< mdString <<  std::endl;
         }