vio_ssl_write(vio*,const uchar*,size_t)中的异常错误
我有一种解密方法,该方法使用私有密钥解密数据:
auto decrypt_private(const unsigned char* data,size_t data_len,
unsigned char* decrypted_data)-> int
{
std::string pr_key_name="mykey.pem";
std::string keypass = "pass";
char * keypass_byte= const_cast<char*>( keypass.c_str() );
//open the private key file
FILE *fp = fopen(pr_key_name.c_str(), "r");
RSA *rsa = PEM_read_RSAPrivateKey(fp, NULL, NULL, keypass_byte);
if(rsa==NULL)
ERR_print_errors_fp(stderr);
fclose(fp);
int rsa_outlen = RSA_private_decrypt(data_len, data, decrypted_data,rsa,
RSA_PKCS1_PADDING);
RSA_free(rsa);
return rsa_outlen;
}
主要我有:
int main(){
std::string encrypted_data;
// encrypted data is in hex encoding
cin>>encrypted_data;
// I know the exact length of decrypted data
unsigned char* decrypted_data = new unsigned char[DATA_SIZE];
unsigned char* encrypted_data_byte= new unsigned char[encrypted_data.length()/2];
int decrypted_data_size= decrypt_private(encrypted_data_byte,
encrypted_data.length()/2, decrypted_data);
// catch error if decryption faild
if(decrypted_data_size==-1){
delete[] decrypted_data;
delete[] encrypted_data_byte;
std::cout<<"decryption faild";
return 1;
}
delete[] decrypted_data;
delete[] encrypted_data_byte;
return 0;
}
但是,当我添加IF条件和解密方法的结果为-1我从viossl.cc中获得错误: ../vio/viossl.cc:315:size_t vio_ssl_write(vio*,const uchar*,size_t):断言`err_peek_error()== 0'失败。 并提出例外,程序崩溃。任何身体都知道原因吗?顺便说一句,我还删除了IF条件,再次遇到了相同的错误。
I have a decryption method which decrypts data using private key:
auto decrypt_private(const unsigned char* data,size_t data_len,
unsigned char* decrypted_data)-> int
{
std::string pr_key_name="mykey.pem";
std::string keypass = "pass";
char * keypass_byte= const_cast<char*>( keypass.c_str() );
//open the private key file
FILE *fp = fopen(pr_key_name.c_str(), "r");
RSA *rsa = PEM_read_RSAPrivateKey(fp, NULL, NULL, keypass_byte);
if(rsa==NULL)
ERR_print_errors_fp(stderr);
fclose(fp);
int rsa_outlen = RSA_private_decrypt(data_len, data, decrypted_data,rsa,
RSA_PKCS1_PADDING);
RSA_free(rsa);
return rsa_outlen;
}
In main I have:
int main(){
std::string encrypted_data;
// encrypted data is in hex encoding
cin>>encrypted_data;
// I know the exact length of decrypted data
unsigned char* decrypted_data = new unsigned char[DATA_SIZE];
unsigned char* encrypted_data_byte= new unsigned char[encrypted_data.length()/2];
int decrypted_data_size= decrypt_private(encrypted_data_byte,
encrypted_data.length()/2, decrypted_data);
// catch error if decryption faild
if(decrypted_data_size==-1){
delete[] decrypted_data;
delete[] encrypted_data_byte;
std::cout<<"decryption faild";
return 1;
}
delete[] decrypted_data;
delete[] encrypted_data_byte;
return 0;
}
but as I add the if condition and the result of the decryption method is -1 I get error from viossl.cc :
../vio/viossl.cc:315: size_t vio_ssl_write(Vio*, const uchar*, size_t): Assertion `ERR_peek_error() == 0' failed.
and throw an exception and the program crashes. Does any body knows the reason? By the way I also removed the if condition and again I get the same error.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
添加
err_clear_error()
解决了问题:Adding
ERR_clear_error()
solved the problem: