我正在編譯C++ Builder 10 Seattle中的應用程序,並嘗試使用OpenSSL進行RSA工作。在C++ Builder中使用OpenSSL
我跟着這個教程:
How to Use OpenSSL to Generate RSA Keys in C/C++
下面是代碼:
#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 Error] Error: 'C:\USERS\ERICWANG\DESKTOP\TESTOPENSSL2\LIB\LIBEAY32.LIB' contains invalid OMF record, type 0x21 (possibly COFF)
我見過一些提示就像使用coff2omf
和implib
工具,但兩者都不起作用。
我用
coff2omf.exe
轉換成libeay32.lib
。我把coff2omf.exe
和libeay32.lib
在同一文件夾,並輸入以下命令:coff2omf libeay32.lib Blibeay32.lib
它說:
ERROR: COFF error: libeay32.lib : invalid machine type detected
我試圖
libeay32.lib
轉換爲.dll
文件中使用implib.exe
。我進入這個命令:implib libeay32.lib Blibeay32.dll
它說:
Error : unable to open file
而且我
libeay32.lib
改變其大小,以1KB的文件。這意味着該文件是錯誤的。
沒有** XE10 **。有** 10.0西雅圖**,** 10.1柏林**等 –