У меня проблема с шифрованием с помощью RSA_public_encrypt.Проблема с OpenSSL с RSA_public_encrypt
Что я имею: модуль (1024 бит), показатель (каждый раз, когда они не меняются) и открытый текст.
Что я хочу: шифровать простой текст, используя открытый ключ, состоящий из модуля и экспонента (которые передаются как HEX-строка) с RSA_PKCS1_OAEP_PADDING.
Проблема заключается в том, что функция RSA_public_encrypt вызывает нарушение доступа, и я не понимаю, почему. Я видел множество подобных примеров в Интернете, но они, похоже, из-за комментариев.
Вот мой код:
procedure RSAPublicEncrypt(const PlainText, Modulus, Exponent: AnsiString);
var
PublicKey: pRSA;
Output: Integer;
BN_Modulus, BN_Exponent: pBIGNUM;
Res: AnsiString;
begin
Result := '';
try
PublicKey := RSA_new(); //Creating new key
PublicKey^.n := BN_new; //Creating new modulus
Output := BN_hex2bn(PublicKey^.n, PAnsiChar(Modulus)); //Convert modulut from hex to BIGNUM
PublicKey^.e := BN_new; //same to the exponent
BN_hex2bn(PublicKey^.e, PAnsiChar(Exponent));
//Trying to encrypt. Here I get the AV
Output := RSA_public_encrypt(Length(PlainText), PAnsiChar(PlainText), PAnsiChar(Res), PublicKey, RSA_PKCS1_OAEP_PADDING);
finally
BN_clear_free(PublicKey^.e);
BN_clear_free(PublicKey^.n);
RSA_free(PublicKey);
end;
end;
Что я делаю неправильно? Помоги мне, пожалуйста. Заранее спасибо!