在我将加密数据发送到服务器并将其恢复后,我无法解密它不稳定的结果

时间:2016-11-18 05:05:04

标签: c sockets encryption openssl rsa

我使用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,但我无法在任何地方检查此数字。

0 个答案:

没有答案