Я компилирую приложение в C++ Builder 10 Seattle и пытаюсь использовать OpenSSL для работы RSA.Использование OpenSSL в C++ Builder
Я после этого учебника:
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
изменить его размер для 1КБ файла. Это означает, что файл был неправильным.
Нет ** XE10 **. Существует ** 10.0 Сиэтл **, ** 10.1 Берлин ** и т. Д. –