古詩詞大全網 - 藝術簽名 - 哪位高手那裏有openssl md5withRSA 簽名的delphi相關資料或代碼

哪位高手那裏有openssl md5withRSA 簽名的delphi相關資料或代碼

第壹步:下載indy9支持ssllib的2個DLL。CSDN有!第二步:網上百度libeay32.pas第三步:修改libeay32.pas,自己添加procedureEVP_MD_CTX_init(ctx:pEVP_MD_CTX);cdecl;procedureEVP_MD_CTX_cleanup(ctx:pEVP_MD_CTX);cdecl;functionRSA_sign(len:integer;_m:PCharacter;_m_length:integer;from:PCharacter;_to:pointer;rsa:pRSA):integer;cdecl;第四步:就是DELPHI代碼了:functionLoadPrivateKey(filename:string):PEVP_PKEY;varbp:PBIO;A,pkey:PEVP_PKEY;begina:=nil;bp:=BIO_new(BIO_s_file());BIO_read_filename(bp,PChar(filename));pkey:=PEM_read_bio_PrivateKey(bp,a,nil,NIL);BIO_free(bp);Result:=pkey;end;functionSign(filename,msg:String):string;varctx:EVP_MD_CTX;buf_in:Pchar;m_len,outl:cardinal;pKey:PEVP_PKEY;m,buf_out:array[0..1024]ofchar;p:array[0..255]ofchar;i:Integer;beginbuf_out:='';iffilename=''thenbeginResult:='';Exit;end;pKey:=LoadPrivateKey(filename);buf_in:=PChar(msg);EVP_MD_CTX_init(@ctx);//初始化EVP_SignInit(@ctx,EVP_sha1());//將需要使用的摘要算法存入ctxl中EVP_SignUpdate(@ctx,buf_in,Length(buf_in));//存入編碼值EVP_DigestFinal(@ctx,m,m_len);//求取編碼的長度為m_len摘要值存入m中rSA_sign(EVP_sha1()._type,m,m_len,buf_out,@outl,pkey.pkey.rsa);//64為SHA1的NIDEVP_MD_CTX_cleanup(@ctx);Result:=EncodeString(StrPas(buf_out));