我正在西雅图 C++Builder 10 中编译一个应用程序,并尝试使用 OpenSSL 进行 RSA 工作。
我遵循了本教程:
如何使用 OpenSSL 在 C/C++ 中生成 RSA 密钥
这是代码:
#include <stdio.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
bool generate_key()
{
int ret = 0;
RSA *r = NULL;
BIGNUM *bne = NULL;
BIO *bp_public = NULL, *bp_private = NULL;
int bits = 2048;
unsigned long e = RSA_F4;
// 1. generate rsa key
bne = BN_new();
ret = BN_set_word(bne,e);
if(ret != 1){
goto free_all;
}
r = RSA_new();
ret = RSA_generate_key_ex(r, bits, bne, NULL);
if(ret != 1){
goto free_all;
}
// 2. save public key
bp_public = BIO_new_file("public.pem", "w+");
ret = PEM_write_bio_RSAPublicKey(bp_public, r);
if(ret != 1){
goto free_all;
}
// 3. save private key
bp_private = BIO_new_file("private.pem", "w+");
ret = PEM_write_bio_RSAPrivateKey(bp_private, r, NULL, NULL, 0, NULL, NULL);
// 4. free
free_all:
BIO_free_all(bp_public);
BIO_free_all(bp_private);
RSA_free(r);
BN_free(bne);
return (ret == 1);
}
int main(int argc, char* argv[])
{
generate_key();
return 0;
}
当我添加libeay32.lib
到ssleay32.lib
我的项目时,我收到一条错误消息:
[ilink32 错误] 错误:'C:\USERS\ERICWANG\DESKTOP\TESTOPENSSL2\LIB\LIBEAY32.LIB' 包含无效的 OMF 记录,类型 0x21(可能是 COFF)
我已经看到了一些技巧,比如使用coff2omf
和implib
工具,但两者都不起作用。
我
coff2omf.exe
以前是转换libeay32.lib
的。我把coff2omf.exe
和libeay32.lib
放在同一个文件夹中,然后输入了这个命令:coff2omf libeay32.lib Blibeay32.lib
它说:
错误:COFF 错误:libeay32.lib:检测到无效的机器类型
我尝试
libeay32.lib
使用. 我输入了这个命令:.dll
implib.exe
implib libeay32.lib Blibeay32.dll
它说:
错误:无法打开文件
我
libeay32.lib
将其大小更改为 1KB 文件。这意味着文件错误。