std :: string.c_str()导致访问冲突0xC0000005

时间:2016-10-06 11:43:12

标签: windows visual-studio-2010 unicode crypto++

我遇到crypto ++ 5.6.4(VS2010)的问题exception.code在RSaVerifyVector函数中抛出异常(在decoder.Put行中):

 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 + "'");
    }

1 个答案:

答案 0 :(得分:0)

我记得几年前,使用VS6,我不得不处理西里尔字符,在那段时间我通过在预处理器定义中添加UNICODE来更改MS项目设置(项目设置 - &gt; C / C ++)在Tab Link中我添加了一个入口点符号:wWinMainCRTStartup。