2016-10-06 3 views
0

ich ein Problem mit Krypto haben ++ 5.6.4 (VS2010) exception.code eine Ausnahme in RSaVerifyVector Funktion führt (in decoder.Put Linie):std :: string.c_str() verursacht Zugriffsverletzung 0xC0000005

bool RsaVerifyVector(const std::string& publicKeyStrHex, const std::string& source, const std::vector<char>& sign) 
    { 
     CryptoPP::HexDecoder decoder; 
     decoder.Put((byte*)publicKeyStrHex.c_str(), publicKeyStrHex.size());//-->>HERE IT THROWS Exception 
     decoder.MessageEnd(); 

     CryptoPP::RSA::PublicKey publicKey; 
     publicKey.Load(decoder); 

     // Verifier object 
     CryptoPP::RSASS<CryptoPP::PSS, CryptoPP::SHA1>::Verifier verifier(publicKey); 

     std::vector<char> rawSignature; 
     std::string signStr(utils::GetBeginOf(sign), sign.size()); 
     utils::FromHexString(utils::string2wstring(signStr), &rawSignature); 
     // Verify 
     const char * pData = utils::GetBeginOf(source); 
     return verifier.VerifyMessage((const byte*) pData, 
      source.size(), (const byte*) utils::GetBeginOf(rawSignature), rawSignature.size()); 
    } 

Helfen Sie mir, eine Ursache für diese Ausnahme bitte zu finden! Ausnahme angehängt. Vielen Dank.

enter image description here

Wenn Ausnahme auftritt, nachdem es mir eine cryptlib.h-Datei und die folgende Codezeile zeigt:

template <class T> 
    void GetRequiredParameter(const char *className, const char *name, T &value) const 
    { 
     if (!GetValue(name, value)) 
      throw InvalidArgument(std::string(className) + ": missing required parameter '" + name + "'"); 
    } 
+0

Wir mussten den Code sehen, der 'publicKeyStrHex' und seine Daten bevölkert. Was ist 'publicKeyStrHex.size()' zum Zeitpunkt des Aufrufs? Ich nehme an, der String ist leer, 'publicKeyStrHex.c_str()' gibt 'NULL' zurück und' publicKeyStrHex.size() 'ist 0." * 'publicKeyStrHex.c_str()' gibt NULL zurück "* ist nicht ganz richtig, wie Sie jetzt wissen :) Versuchen Sie, ein 'ASSERT (! publicKeyStrHex.empty())' 'hinzuzufügen, damit der Code Ihnen sagt, wenn ein Problem vorliegt. Sie haben bessere Dinge mit Ihrer Zeit zu tun, als es zu Debug-Programmen zu verwenden. Lass die Werkzeuge die Arbeit machen. – jww

Antwort

0

ich vor, dass mehrere Jahre erinnern, VS6 mit, ich hatte zu tun mit den kyrillischen Zeichen, und in dieser Zeit hatte ich die MS-Projekt Einstellungen durch Hinzufügen von UNICODE in Preprozessor-Definition (Projekteinstellungen -> C/C++) geändert und in der Tab Link habe ich ein Einstiegspunkt-Symbol hinzugefügt: wWinMainCRTStartup.

+0

Vielen Dank für die Antwort. Es hat nicht geholfen. – al072

Verwandte Themen