Nom : capt.jpg
Affichages : 796
Taille : 47,6 Ko
Bonjour j'ai un fichier que je veux hash , il compile et fonctionne , j'ai bien un hash mais il se termine avec une erreur compréhensible , avez vous svp une idée ?

l'erreur :
Run-Time Check Failure #2 - Stack around the variable 'mdString' was corrupted.

le .h
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
#ifndef HASHFILE_H
#define HASHFILE_H
 
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <openssl/sha.h>
#include <iostream>
#include <fstream>
#include <sstream>
 
#ifndef SIZE_STRING
#define SIZE_STRING 20
#endif
 
namespace ToolLib {\

/////////////////////////////////////////////////////////////////////////////////////////
//! Manages a HashFile.
/////////////////////////////////////////////////////////////////////////////////////////
class HashFile
{
public:
   HashFile();
 	HashFile(std::string nameFile, std::string nameHash);
   virtual ~HashFile();
 
   char* generateHash(char* path);
   char* generateHash(std::ifstream myFile);
   char* generateHash();
//   bool checkHash(std::ifstream myFile, char* myHash);
   bool checkHash(std::string myFile, std::string myHash);
 
   // Getter & Setter
   void setm_File(std::string file);
   std::string getm_File();
   void setm_FileHash(std::string fileHash);
   std::string getm_FileHash();
 
private:
	std::string m_File  ;      // name of the file to do the integrity 
	std::string m_FileHash  ;  // name of the file who contain the hash of m_file
}; 
}
#endif




la fonction qui lance l erreur
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
51
52
53
char* HashFile::generateHash() 
{
 
   if( NULL != m_File.c_str() )
   {
      std::ofstream fileHash( m_FileHash.c_str(), ofstream::out|ofstream::trunc );
      std::ifstream file( m_File.c_str() );
      unsigned char digest[SHA512_DIGEST_LENGTH];
      char mdString[(SHA512_DIGEST_LENGTH * 2)+1 ];
      std::stringstream buffer; // variable qui contient tout le fichier
 
		if( file.is_open() && fileHash.is_open() )
		{			
			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);
 
			for(int i = 0; i < SHA512_DIGEST_LENGTH; i++)
			{
            sprintf_s(&mdString[i*2],sizeof(&mdString[i*2]), "%02x", (unsigned int)digest[i]);
			}
        // mdString="ed f  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxaaaaaaaaaaaaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
 
			fileHash << mdString;
			printf_s("---SHA512 digest de \"%s\" : %s\n", m_File.c_str(), mdString);
		}
 
      if( file.is_open() )
		{
			file.close();
		}
 
		if( fileHash.is_open() )
		{
			fileHash.close();
		}
 
		//system("pause"); //[test]
		//effacement du contenu des variables
		//strcpy_s( mdString, sizeof(mdString), "" );
		buffer.clear();
 
      printf_s("-SHA512 digest de \"%s\" : %s\n", m_File.c_str(), mdString);
      return mdString;
	}
	else
	{
		printf_s( "\n\n Merci de mettre comme argument un fichier\n\n" );
      return 0;
	}
}


le main
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
 
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <openssl/sha.h>
#include <iostream>
#include <fstream>
#include <sstream>
#include "HashFile.h"
 
using namespace std;
 
 
int main(int argc, char * argv[])
{
 
   ToolLib::HashFile * ClassHashFile = new ToolLib::HashFile("test6.txt", "sha512test.txt");
   ClassHashFile->setm_File("test6.txt");
   ClassHashFile->setm_FileHash("sha512test.txt");
   printf_s("Le SHA512 digest de \"%s\" : %s\n", ClassHashFile->getm_File(), ClassHashFile->generateHash());
   delete ClassHashFile;
 
 
   return 0;
}

Merci pour vos conseils et aides.


l