[英]c++ Segmentation fault printing an unsigned char
尝试打印由 function 填充的缓冲区时出现分段错误:
int ret = 0;
unsigned char plaintext;
/* ret will contain the length of the "plaintext" output buffer */
ret = gcm_decrypt( &ciphertext[0], ciphertext_len, &aad[0], aad_len, &tag[0], (unsigned char*)decoded_key.c_str(), &iv[0], iv_len, &plaintext );
/* This will segfault BUT it actually prints out the correct data */
std::string sName(reinterpret_cast<char*>(&plaintext)
cout << "ret: " << ret << endl;
cout << "plaintext: " << sName << endl;
我已经尝试了很多方法来从该纯文本缓冲区中获取 std::string ,但我无法弄清楚。
function 需要一个unsigned char *
int gcm_decrypt(unsigned char *ciphertext, int ciphertext_len, unsigned char *aad, int aad_len, unsigned char *tag, unsigned char *key, unsigned char *iv, int iv_len, unsigned char *plaintext)
根据@drescherjm 的建议,我将其更新为:
结束代码是
int main(void)
{
std::string key_encoded = "DgvkCrkyBNSy9yHP1Yznyc2DkHTIUXaO6NlEw4CSq0E=";
std::string decoded_key = base64_decode(key_encoded);
std::string token_encoded = "rj_ZkkZUOZMxZOfOmLpEUB3siU7u6RjZFeM9s-gb_xCR56WFKFAJiMyF2T6CBRmlh_Sy0i_lfyT9AI8sEif8MTIIszyzSl_aDnG48aO50yaHGuRSYbUbSYm9WIiQ0g==";
std::string token_decoded_tmp = base64_decode( token_encoded );
std::string token_decoded( token_decoded_tmp.begin()+32, token_decoded_tmp.end() );
int ciphertext_len = token_decoded.size();
std::string aad = "xxxxxxxxxxxxxxx";
int aad_len = aad.size();
std::string tag( token_decoded_tmp.begin()+16, token_decoded_tmp.end()+32 );
std::string iv( token_decoded_tmp.begin(), token_decoded_tmp.begin()+16 );
int iv_len = iv.size();
int ret = 0;
unsigned char plaintext[1024];
ret = gcm_decrypt(
(unsigned char*)token_decoded.c_str(),
ciphertext_len,
(unsigned char*)aad.c_str(),
aad_len,
(unsigned char*)tag.c_str(),
(unsigned char*)decoded_key.c_str(),
(unsigned char*)iv.c_str(),
iv_len,
plaintext
);
cout << "ret: " << ret << endl;
cout << "plaintext: <" << plaintext << ">" << endl;
return 0;
}
而且现在很完美。 谢谢!
@drescherjm 我无法将您的答案标记为正确答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.