2016-10-06 12 views
0

は私が暗号++ 5.6.4に問題が発生する(VS2010)exception.codeは(decoder.Putラインで)RSaVerifyVector機能で例外がスローされます。のstd :: string.c_strは()アクセス違反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()); 
    } 

この例外の原因を見つけてください。例外が添付されています。どうもありがとうございました。

enter image description here

それは私にcryptlib.hファイルと、次のコード行を示した後、例外が発生:

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

私たちは、 'publicKeyStrHex'とそのデータを生成するコードを見に行きました。呼び出し時に 'publicKeyStrHex.size()'とは何ですか? 'publicKeyStrHex.c_str()'が 'NULL'を返しています。*はありません。あなたが今知っているようにかなり正しい:) 'ASSERT(!publicKeyStrHex.empty())'を追加して、問題が発生したときにコードが指示するようにしてください。あなたは、プログラムをデバッグするのに使ったよりも、時間をかけてより良いことがあります。ツールは仕事をしましょう。 – jww

答えて

0

私は数年前、VS6を使用して、私が対処しなければならなかったことを覚えておいてください(プロジェクト設定 - > C/C++)とタブリンクにエントリポイントシンボル:wWinMainCRTStartupを追加して、UNICODEをプリプロセッサ定義に追加してMSプロジェクトの設定を変更しました。

+0

ありがとうございます。それは助けになりませんでした。 – al072

関連する問題