当前位置:  开发笔记 > 人工智能 > 正文

RSA_private_decrypt返回-1

如何解决《RSA_private_decrypt返回-1》经验,为你挑选了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?



1> Tuminoid..:

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

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

128 from encrypt. 
1 from decrypt: 'A'

资源:

#include 
#include 
#include 

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;
}

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有