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