【发布时间】:2014-09-17 18:43:38
【问题描述】:
我在使用生成的 RSA 公钥加密字符串时遇到问题。此密钥存储在无符号字符数组中。这是该键的示例
char *testkey = "-----BEGIN RSA PUBLIC KEY-----\n"
"MIIBCgKCAQEA3InRLxdx25R6eA4PyXcYzKyFiJULS3ypqlETztAW488XkEM263vJ\n"
"SY5xpfwph9thcsjYUI3H60qxaTRVhNxbzbsG0ELkEudm4cLMn2oVpphT4cB3zx6V\n"
"az1cuzIfmL34M8YiRQw6MvdaDJS34y15dXDm0BSXF7sanZaYrHvu84j5mQVK0OWq\n"
"kvpVs+J55xul/IQsSEWr94HjPupdDYzGXsEiQ7p5cNrvKgjGKqKV177EYROVVgVp\n"
"gAWm0G6aDrfDLKqsXo8RXj4dyyuZqoL2e7Fa46Gz4I+tb2SWkEwLGpqBe/CUDzDh\n"
"9aLhaTijDQhcaR5+u88XNbarckKU96wiiQIDAQAB\n"
"-----END RSA PUBLIC KEY-----\0";
我目前已经编写了这段代码来进行加密
RSA *rsa = NULL;
BIO *key_bio;
static const int bit = 2048;
key_bio = BIO_new_mem_buf(testkey, -1);
if(key_bio == NULL){
printf("No key bio \n");
exit(1);
}
rsa = PEM_read_bio_PUBKEY(key_bio, NULL, NULL, NULL);
if(rsa == NULL){
fprintf(stderr, "Error loading RSA Public Key File.\n");
ERR_print_errors_fp(stderr);
exit(1);
}
// Alloc the encrypted buffer
e->enckey = calloc(1, 2048);
int res = RSA_public_encrypt(strlen((char*)e->key->key), e->key->key, e->enckey, rsa, RSA_PKCS1_PADDING);
if(res == -1){
printf("Failed to encrypt AES key \n");
printf("Error: strerror(errno)\n");
}
但是,这不起作用。我认为这是关于密钥格式的问题,但是我还没有设法找出如何转换它,并使用 RSA 结构进行加密。
有什么想法吗?
【问题讨论】:
-
“这不起作用”是什么意思?它编译吗?它运行吗?您是否收到任何错误消息?你有输出吗?预期的行为是什么? (另外,
e声明在哪里?为什么缺少这段代码?) -
E 无关紧要。只是一个包含我要加密的数据的结构。加密数据的缓冲区也存储在那里。程序终止,因为 RSA = NULL,并打印错误:期望公钥。 E 是从另一个函数传递给这个函数的。