在网上看到这段代码?uses OpenSSLUtils,libeay32;function ReadPrivateKey(AFileName: TFileName): pEVP_PKEY;
var
keyfile: pBIO;
function cb(buffer: PChar; blength: integer;
verify: integer; data: pointer): integer; cdecl;
var
Passphrase: String;
begin
result := 0;
end;begin
keyfile := BIO_new(BIO_s_file());
BIO_read_filename(keyfile, PChar(AFilename));
result := PEM_read_bio_PrivateKey(keyfile, nil, @cb, nil);
BIO_free(keyfile);
end;function EVP_Sign(keyfile,str:string):string;
var key: pEVP_PKEY;mdLength, b64Length: dword;
mdValue: array [0..2200] of byte;
mdctx: EVP_MD_CTX;
memout, b64: pBIO;
inbuf, outbuf: array [0..1023] of char;
ss:string;
i:integer;
begin
result:= '';
key := ReadPrivateKey(keyfile);
if key <> nil then
begin
StrPCopy(inbuf, str);
EVP_SignInit(@mdctx, EVP_sha1());
EVP_SignUpdate(@mdctx, @inbuf, StrLen(inbuf));mdLength := 0;
EVP_SignFinal (@mdctx, @mdValue, mdLength,key);
for i:= 0 to mdLength-1 do
begin
ss:= ss+inttohex(mdValue[i],2);
end;
EVP_PKEY_free(key);
result :=ss;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text := EVP_Sign('D:\1.pem',edit1.Text );
end;---------------------------------------------------------------怎么运行到 result := PEM_read_bio_PrivateKey(keyfile, nil, @cb, nil); 的时候出错啦...错误信息:Types of actual and formal var parameters must be identcal
var
keyfile: pBIO;
function cb(buffer: PChar; blength: integer;
verify: integer; data: pointer): integer; cdecl;
var
Passphrase: String;
begin
result := 0;
end;begin
keyfile := BIO_new(BIO_s_file());
BIO_read_filename(keyfile, PChar(AFilename));
result := PEM_read_bio_PrivateKey(keyfile, nil, @cb, nil);
BIO_free(keyfile);
end;function EVP_Sign(keyfile,str:string):string;
var key: pEVP_PKEY;mdLength, b64Length: dword;
mdValue: array [0..2200] of byte;
mdctx: EVP_MD_CTX;
memout, b64: pBIO;
inbuf, outbuf: array [0..1023] of char;
ss:string;
i:integer;
begin
result:= '';
key := ReadPrivateKey(keyfile);
if key <> nil then
begin
StrPCopy(inbuf, str);
EVP_SignInit(@mdctx, EVP_sha1());
EVP_SignUpdate(@mdctx, @inbuf, StrLen(inbuf));mdLength := 0;
EVP_SignFinal (@mdctx, @mdValue, mdLength,key);
for i:= 0 to mdLength-1 do
begin
ss:= ss+inttohex(mdValue[i],2);
end;
EVP_PKEY_free(key);
result :=ss;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text := EVP_Sign('D:\1.pem',edit1.Text );
end;---------------------------------------------------------------怎么运行到 result := PEM_read_bio_PrivateKey(keyfile, nil, @cb, nil); 的时候出错啦...错误信息:Types of actual and formal var parameters must be identcal
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货