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
Partager