【发布时间】:2018-11-13 17:59:52
【问题描述】:
我一直在尝试使用 openssl 的 RSA_public_encrypt 加密测试字符串,但在我尝试运行它的所有方式中都会导致段错误。
我尝试使用 BIO 检查我从 pem 文件中读取的 RSA 密钥是否有效,并且它以正确的密钥和指数大小正确返回了公钥。
我最初尝试使用 PEM_read_bio_RSA_PUBKEY,但没有成功。我不完全确定这和PEM_read_bio_RSAPublicKey 之间的区别,所以如果有人可以对此有所了解。
另外,在尝试BIO 之前,我使用了常规的 FILE 结构和与之对应的函数,它一直给我段错误,我也无法检查是否加载了正确的 RSA 密钥。不确定这是否相关。
#include <stdio.h>
#include <string.h>
#include <openssl/pem.h>
#include <openssl/rsa.h>
#include <openssl/conf.h>
int main()
{
RSA *rsa;
rsa = RSA_new();
BIO *bp_public = NULL;
RSA *pubkey;
bp_public = BIO_new_file("public.pem", "rt");
pubkey = PEM_read_bio_RSAPublicKey(bp_public, &rsa, NULL, NULL);
BIO * keybio = BIO_new(BIO_s_mem());
RSA_print(keybio, rsa, 0);
char buffer [2048];
while (BIO_read (keybio, buffer, 2048) > 0)
{
printf("%s", buffer);
}
BIO_free(bp_public);
if (pubkey == NULL || rsa == NULL)
printf("Something went wrong");
char msg[] = "Hello";
unsigned char * encrypted = NULL;
RSA_public_encrypt(5, (unsigned char *)msg, encrypted, rsa, RSA_PKCS1_OAEP_PADDING);
printf("Here: %s", encrypted);
}
另外,我尝试同时使用 pubkey 和 rsa 作为键,但没有一个起作用。
我确信我遗漏了一些非常明显的东西,但我已经花了几个小时的时间,现在我有点迷失在 openssl 文档中。
感谢您的帮助!
无关说明:如果我使用RSA_private_encrypt(),加密文本返回null
【问题讨论】:
-
@AnttiHaapala 呃,对不起。我在复制它们时错过了它们,有一个未使用的功能我不得不省略并且错过了过程中的包含。谢谢你提醒我。 :)
-
BIO_read 似乎无法使用
%s打印它... -
@AnttiHaapala 好吧,这似乎对我有用。这就是我得到的:pasted.co/682d8a0d
-
你认为空指针如何作用于
RSA_public_encrypt的参数 -
哦,看起来像在做
unsigned char encrypted[RSA_size(rsa)];而不是把它设置为NULL实际上加密了文本。