我一直在尝试在 C++ 应用程序上使用 RSA C 库(因为缺少“官方” [阅读:OpenSSL] C++ 实现,所以这似乎是正确的方法)。问题是,每当我尝试编译测试代码时:
#include <iostream>
#include <openssl/rsa.h>
#include <openssl/engine.h>
#include <unistd.h>
using namespace std;
int main(int argc, char *argv[]) {
RSA *myKeyPair = RSA_generate_key(2048, 65537, NULL, NULL);
unsigned char *to;
unsigned char *totwo;
if (myKeyPair == NULL) {
cout << "ERROR 1" << endl;
return 0;
}
to = (unsigned char *) malloc(RSA_size(myKeyPair) - 11);
if (RSA_private_encrypt(13, (const unsigned char *)"Hello World!", to, myKeyPair, RSA_PKCS1_PADDING) == -1) {
cout << "ERROR 2" << endl;
return 0;
}
cout << to << endl;
totwo = (unsigned char *) malloc(RSA_size(myKeyPair) - 11);
if (RSA_public_decrypt(13, to, totwo, myKeyPair, RSA_PKCS1_PADDING) == -1) {
cout << "ERROR 3" << endl;
return 0;
}
cout << totwo;
free(to);
free(totwo);
RSA_free(myKeyPair);
return 0;
}
我得到了所有 RSA_* 函数的未定义引用错误(请注意,我使用 -lssl 进行链接)。更奇怪的是,使用 GCC 编译完全相同的代码可以完成这项工作(当然,由于 C++ std lib 引用,它不会编译,但关键是我没有得到 RSA 函数的未定义引用)。
对于如何解决这个问题,有什么想法吗?(无需重复任何其他库?)。
答案1
你可能想看看如何混合使用 C 和 C++C++ FAQ 部分。