本文介绍了RSA_private_decrypt返回-1的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时删除!!

我尝试使用RSA算法加密简单文本。我的代码有问题。

  RSA * _RSA; 
unsigned char text [2560] =A;
unsigned char sectext [2560];
unsigned char decrypttext [2560];
int i = 0;

_RSA = RSA_generate_key(1024,65537,NULL,NULL);
i = RSA_public_encrypt(1,text,sectext,_RSA,RSA_PKCS1_OAEP_PADDING);
i = RSA_private_decrypt(1,sectext,decrypttext,_RSA,RSA_PKCS1_OAEP_PADDING);
RSA_free(_RSA);

RSA_public_encrypt 的返回值为128,这是密文的大小。 RSA_private_decrypt 返回-1,这是一个错误。如果我尝试显示恢复的文本,那么我什么都没有。



为什么 RSA_private_decrypt 返回-1? p>

解决方案

你不应该将1传递给 RSA_private_decrypt ,而是阻止你的长度正在尝试解密,即。返回值 RSA_public_encrypt = 128.当您解密时,您不知道明文的长度!



这个完整的示例程序导致:

  128加密。 
1来自解密:'A'

资料来源:

  #include< openssl / rsa.h> 
#include< openssl / engine.h>
#include< stdio.h>

int main(int argc,char ** argv)
{
RSA * myRSA;
unsigned char cleartext [2560] =A;
unsigned char encrypted [2560] = {0};
unsigned char decryptpted [2560] = {0};
int resultEncrypt = 0;
int resultDecrypt = 0;

myRSA = RSA_generate_key(1024,65537,NULL,NULL);
resultEncrypt = RSA_public_encrypt(1 / * strlen(cleartext)* /,cleartext,encrypted,myRSA,RSA_PKCS1_OAEP_PADDING);
printf(%d from encrypt.\\\
,resultEncrypt);
resultDecrypt = RSA_private_decrypt(128 / * resultEncrypt * /,加密,解密,myRSA,RSA_PKCS1_OAEP_PADDING);
printf(%d from decrypt:'%s'\\\
,resultDecrypt,decryptpted);
RSA_free(myRSA);

return 0;
}


I try to encrypt simple text with RSA algorithm. I have a problem with my code.

RSA        *_RSA ;
unsigned char text[2560] = "A";
unsigned char sectext[2560];
unsigned char decrypttext[2560];
int i = 0;

_RSA = RSA_generate_key ( 1024, 65537, NULL, NULL );
i = RSA_public_encrypt ( 1, text,    sectext,     _RSA, RSA_PKCS1_OAEP_PADDING );
i = RSA_private_decrypt( 1, sectext, decrypttext, _RSA, RSA_PKCS1_OAEP_PADDING);
RSA_free ( _RSA );

The return value of RSA_public_encrypt is 128, which is the size of the ciphertext. RSA_private_decrypt returns -1, which is an error. If I try to display the recovered text then I get nothing.

Why is RSA_private_decrypt returning -1?

解决方案

You should not pass 1 to RSA_private_decrypt but the length of the block you are trying to decrypt, ie. the return value of RSA_public_encrypt = 128. You do not know the length of the cleartext when you are decrypting!

This complete sample program results in:

128 from encrypt.
1 from decrypt: 'A'

Source:

#include <openssl/rsa.h>
#include <openssl/engine.h>
#include <stdio.h>

int main(int argc, char **argv)
{
    RSA *myRSA;
    unsigned char cleartext[2560] = "A";
    unsigned char encrypted[2560] = { 0 };
    unsigned char decrypted[2560] = { 0 };
    int resultEncrypt = 0;
    int resultDecrypt = 0;

    myRSA = RSA_generate_key ( 1024, 65537, NULL, NULL );
    resultEncrypt = RSA_public_encrypt ( 1 /* strlen(cleartext) */, cleartext, encrypted, myRSA, RSA_PKCS1_OAEP_PADDING );
    printf("%d from encrypt.\n", resultEncrypt);
    resultDecrypt = RSA_private_decrypt( 128 /* resultEncrypt */, encrypted, decrypted, myRSA, RSA_PKCS1_OAEP_PADDING);
    printf("%d from decrypt: '%s'\n", resultDecrypt, decrypted);
    RSA_free ( myRSA );

    return 0;
}

这篇关于RSA_private_decrypt返回-1的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

1403页,肝出来的..

09-06 17:29