从Delphi 2005升级到2010 libeay32.dll

时间:2011-07-18 11:42:35

标签: delphi unicode delphi-2010 rsa

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

有没有人有这个问题? 谢谢 萨姆

1 个答案:

答案 0 :(得分:5)

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

您是类型转换TFileName(这是string的别名,而在Delphi 2010中,这是UnicodeString直接PAnsiChar。 我想已经BIO_read_filename失败了;你不检查返回的值。根据{{​​3}},它需要UTF8编码的字符串,因此请尝试使用documentation对其进行编码:

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