我正在将程序从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;


有人遇到这个问题吗?
谢谢
山姆

最佳答案

您应该收到警告W1044“ TFileName到PAnsiChar的可疑类型转换”。

您正在直接将TFileName(这是string的别名,在Delphi 2010中是UnicodeString)进行类型转换。
我想已经PAnsiChar失败了;您无需检查返回的值。根据documentation,它期望使用UTF8编码的字符串,因此请尝试使用UTF8Encode对其进行编码:

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

10-05 22:17