我使用openssl RSA算法加密一个文件并将其发送到服务器,然后使用套接字元素将其发回。但我无法获得原始数据。确切地说,有时候。我在这里附上我的部分代码,你能说出我的原因吗?
这是我加密和解密的代码,我认为这不是问题:
int public_encrypt(unsigned char * data,int data_len, unsigned char *encrypted)
{
FILE *fp=fopen("public.pem","rb");
RSA *rsa;
rsa=PEM_read_RSA_PUBKEY(fp,NULL,NULL,NULL);
//RSA * rsa = createRSA(key,1);
int result = RSA_public_encrypt(data_len,data,encrypted,rsa,padding);
return result;
}
int private_decrypt(unsigned char * enc_data,int data_len, unsigned char *decrypted)
{
FILE *fp=fopen("private.pem","rb");
RSA *rsa;
rsa=PEM_read_RSAPrivateKey(fp,NULL,NULL,NULL);
//RSA * rsa = createRSA(key,0);
int result = RSA_private_decrypt(data_len,enc_data,decrypted,rsa,padding);
return result;
}
发送内容时:
int encrypted_length=public_encrypt(buffer,st.st_size,publicKey,encrypted);
int decrypted_length= private_decrypt(encrypted,256,privateKey,decrypted);
第二行只是为了测试它是否可以很好地解密,并且它一直运行良好
当我从服务器获取数据时,代码为:
int decrypted_length = private_decrypt(buffer,256,privateKey,decrypted);
缓冲区是我发送的。我使用md5来检查内容,它们是一样的。测试后,result
中的private_decrypt
在某些情况下为-1。结果真的很不稳定,我找不到原因。但我可以发现,如果文件已经存在,请说我用相同的函数第二次运行它,结果不是-1。
我尝试使用ERR_get_error()
来获取错误,其结果为0x407106b,但我无法在任何地方检查此数字。