牛骨文教育服务平台(让学习变的简单)
博文笔记

开发支付宝支付用DELPHI实现 RSA签名

创建时间:2015-08-20 投稿人: 浏览次数:9711

近来根据业务需求 在ERP中集成了微信支付,支付宝支付,开发支付宝支付时最大的障碍就是RSA签名,找了很多资料,最终用 下了个libeay32.pas  根据网上资料最终解决了问题



function LoadPrivateKey(filename:string ): PEVP_PKEY;
var
  bp : PBIO  ;
 A,pkey :PEVP_PKEY ;
begin
  a:=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;




function Sign(filename,msg : String):string;
var
     ctx : EVP_MD_CTX   ;
     buf_in:Pchar;
     m_len,outl :cardinal;
     pKey : PEVP_PKEY;
     m,buf_out:array   [0..1024]   of   char;
     p:array   [0..255]   of   char;
     i:Integer;
 begin
 buf_out:="";
 if filename="" then
 begin
   Result:="";
   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的NID
 EVP_MD_CTX_cleanup(@ctx);

   Result:=EncodeString(StrPas(buf_out)) ;

end;

QQ:24177885

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。