【问题标题】:RSA_private_decrypt returns -1RSA_private_decrypt 返回 -1
【发布时间】:2010-09-30 09:36:09
【问题描述】:

我尝试使用 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?

【问题讨论】:

标签: c security encryption openssl


【解决方案1】:

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

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

128 from encrypt. 
1 from decrypt: '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 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;
}

【讨论】:

    【解决方案2】:

    尝试调用ERR_error_string() 以获取错误的文本描述。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-06
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      • 2015-03-04
      • 2013-10-27
      • 2016-07-28
      • 2014-09-26
      相关资源
      最近更新 更多