我尝试用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,这是一个错误。如果我尝试显示恢复的文本,那么我什么也得不到。
Why is RSA_private_decrypt
返回-1?
你不应该将 1 传递给RSA_private_decrypt
但是您尝试解密的块的长度,即。返回值RSA_public_encrypt
= 128.解密时你不知道明文的长度!
这个完整的示例程序的结果是:
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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)