我正在将我的程序从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;
有没有人有这个问题? 谢谢 萨姆
答案 0 :(得分:5)
您应该收到警告W1044“对PAnsiChar的TFileName的可疑类型转换”。
您是类型转换TFileName
(这是string
的别名,而在Delphi 2010中,这是UnicodeString
)直接到PAnsiChar
。
我想已经BIO_read_filename
失败了;你不检查返回的值。根据{{3}},它需要UTF8编码的字符串,因此请尝试使用documentation对其进行编码:
BIO_read_filename(keyfile, PAnsiChar(UTF8Encode(AFileName)));