从Delphi 2005升级到2010 libeay32.dll

Sam*_*uel 2 delphi unicode rsa delphi-2010

我正在将我的程序从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;
Run Code Online (Sandbox Code Playgroud)

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

Ond*_*lle 5

您应该收到警告W1044"对PAnsiChar的TFileName的可疑类型转换".

你是类型转换TFileName(这是stringDelphi 2010 的别名UnicodeString),直接PAnsiChar.我猜这已经BIO_read_filename失败了; 你不检查返回的值.根据文档,它需要UTF8编码的字符串,所以尝试使用UTF8Encode对其进行编码:

BIO_read_filename(keyfile, PAnsiChar(UTF8Encode(AFileName)));
Run Code Online (Sandbox Code Playgroud)

  • @Samuel您可能会遇到更多这些问题.我建议你阅读Marco Cantu关于Unicode Delphi的白皮书,并根据这一点审查你的代码. (3认同)
  • http://edn.embarcadero.com/article/images/38980/Delphi_and_Unicode.pdf (2认同)