支付宝签名
支付宝签名
//1024位的RSA密钥基本安全,2048位的密钥极其安全。支付宝建议采用2048位秘钥。 //事实上现在注册的支付宝商户,只能使用SHA256WithRSA算法,老商户才可以继续使用SHA1WithRSA算法 //RSA2 SHA256WithRSA (强烈推荐使用),强制要求RSA密钥的长度至少为2048, //RSA SHA1WithRSA 对RSA密钥的长度不限制,推荐使用2048位以上 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; m,buf_out:array [0..2048] of char; p:array [0..255] of char; i:Integer; begin buf_out:=''; pKey := nil; if filename='' then begin Result:=''; Exit; end; pKey := LoadPrivateKey(filename); buf_in := PChar(msg); EVP_MD_CTX_init(@ctx); //初始化 EVP_SignInit(@ctx,EVP_sha256()); // 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 rSA_sign(EVP_sha256()._type,m,m_len,buf_out,@outl,pkey.pkey.rsa); //64为SHA1的NID EVP_MD_CTX_cleanup(@ctx); BinToHex(buf_out,p,outl); Result:=EncodeString(hextostring(p)) ; // Result:=EncodeString(StrPas(buf_out)) ; end;
本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/10421576.html