Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. ###raw>post.musername###
    Membre régulier
    erreur de sha512 Impossible de faire un hash d'un fichier archive .7z
    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;
             }
      0  0

  2. #2
    Membre régulier
    Je pense fortement que le soucis provient de cette ligne pour ouvrir un fichier Zip :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    std::ifstream file( m_File.c_str() );

    Est ce que vous me conseillez d'utiliser une autre fonction\type ?

    Svp , quel type me conseillez vous pour charger un zip ou un fichier video de 30giga maximum ?

    Merci

    PS : c 'est deux sujets différents c 'est pourquoi je me suis permis de creer 2 messages

  3. #3
    Expert éminent sénior
    Que fait SystemConfiguration::COutilsCommun::OpenIStream?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.