Обновление с Delphi 2005 до 2010 libeay32.dll - PullRequest
2 голосов
/ 18 июля 2011

Я обновляю свою программу с Delphi 2005 до Delphi 2010. У меня проблема с функциями RSA

Следующая процедура работает хорошо при D2005, но с D2010 результат всегда равен нулю. Я уже пробовал с новой версией libeay32.dll

function ReadPrivateKey(AFileName: TFileName): pEVP_PKEY;
var
  keyfile: pBIO;
  a : pEVP_PKEY;
begin
  a := nil;
  keyfile := BIO_new(BIO_s_file());
  BIO_read_filename(keyfile,   PAnsiChar(AFilename));
  result := PEM_read_bio_PrivateKey(keyfile, a, nil, nil);
  if result = nil then
  begin
    raise Exception.Create('Não foi possível ler a chave privada.');
  end;
  BIO_free(keyfile);
end;

У кого-нибудь была эта проблема? Спасибо Sam

1 Ответ

5 голосов
/ 18 июля 2011

Вы должны получить предупреждение W1044 «Подозрительное преобразование типа TFileName в PAnsiChar».

Вы вводите тип TFileName (это псевдоним для string, а в Delphi 2010 это UnicodeString) напрямую до PAnsiChar.Я думаю, что уже BIO_read_filename терпит неудачу;Вы не проверяете возвращаемое значение.Согласно документации , она ожидает строку в кодировке UTF8, поэтому попробуйте кодировать ее с помощью UTF8Encode :

BIO_read_filename(keyfile, PAnsiChar(UTF8Encode(AFileName)));
...