C RSA_public_加密神秘seg错误

C RSA_public_加密神秘seg错误,c,C,RSA_public_encrypt上出现分段错误,我找不到实际原因/解决方案 我尝试了几乎所有我能想到的方法,包括每个变量/定义组合 非常感谢您的帮助 代码如下: void输入头(int sockfd){ //如果(fork()==0){ char pubKey[MAXBUF]; read(sockfd、pubKey、MAXBUF);//读取从服务器发送的公钥 RSA*rsa2=NULL; BIO*key_bio2=BIO_new_mem_buf(pubKey,-1); PEM_read_bi

RSA_public_encrypt上出现分段错误,我找不到实际原因/解决方案

我尝试了几乎所有我能想到的方法,包括每个变量/定义组合

非常感谢您的帮助

代码如下:

void输入头(int sockfd){
//如果(fork()==0){
char pubKey[MAXBUF];
read(sockfd、pubKey、MAXBUF);//读取从服务器发送的公钥
RSA*rsa2=NULL;
BIO*key_bio2=BIO_new_mem_buf(pubKey,-1);
PEM_read_bio_RSAPublicKey(key_bio2和rsa2,0,NULL);
而(1){
字符加密的[MAXBUF]={0};
字符缓冲区[MAXBUF];
scanf(“%s”,缓冲区);
如果(!RSA_public_encrypt(strlen(buffer),(unsigned char*)buffer,(unsigned char*)encrypted,rsa2,RSA_PKCS1_OAEP_PADDING)){
log_ssl_err(“EncryptInit for cipher失败”);
}
char*data=b_编码(加密,strlen((char*)加密));
写入(sockfd、数据、strlen(数据));
免费(数据);
}
出口(1);
//}
}
以下是Valgrind报告的完整错误:

==69377== Invalid read of size 8
==69377==    at 0x4A00A84: RSA_public_encrypt (in /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1)
==69377==    by 0x1099C4: inputRead (login.c:102)
==69377==    by 0x109C81: Client (login.c:144)
==69377==    by 0x10964D: main (login.c:39)
==69377==  Address 0x8 is not stack'd, malloc'd or (recently) free'd


加密的数据有多大?它是否一定是长度小于所用密钥的模数大小的终止字符串,小于42?@WhozCraig我尝试了几种长度1-10,我甚至尝试过将其用于硬编码字符串,但总是“大小为8的无效读取”。无论如何,在本代码中都保证进行一些实际的错误检查和大小验证。很多事情可能都不符合你的假设。您忽略了读取的结果、扫描的结果和pem加载的结果。如果他们真的想抓住你,那就不是妄想症了,嗤之以鼻从来都不是一个好主意。每次我在无法保证有效的以NUL结尾的字符数组(即,只有NUL结尾的数组)的任何上下文中看到strlen(),我都会感到不安:(@bakedbeanzzzz-从服务器发送的公钥是否已终止?