从 Delphi 2005 升级到 2010 libeay32.dll

发布于 2024-11-24 10:31:22 字数 577 浏览 0 评论 0原文

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

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

I'm upgrading my program from Delphi 2005 to Delphi 2010.
I'm having a problem with RSA functions

The following procedure work's well under D2005, but with D2010 the result is always nil.
I allready tried with new version of 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;

Does anyone had this problem?
Thanks
Sam

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

泛泛之交 2024-12-01 10:31:22

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

您正在将 TFileName(这是 string 的别名,在 Delphi 2010 中为 UnicodeString直接转换为PAnsiChar
我猜 BIO_read_filename 已经失败了;您不检查返回值。根据 文档,它需要 UTF8 编码的字符串,因此请尝试使用UTF8Encode

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

You should get a warning W1044 "Suspicious typecast of TFileName to PAnsiChar".

You're typecasting TFileName (which is an alias for string and in Delphi 2010 this is UnicodeString) directly to PAnsiChar.
I guess that already BIO_read_filename fails; you don't check the returned value. According to the documentation, it expects UTF8-encoded string, so try encoding it with UTF8Encode:

BIO_read_filename(keyfile, PAnsiChar(UTF8Encode(AFileName)));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文