最近在做建行支付接口,商户到银行的已经通了,现在遇到的问题就是当用户交易完成之后建行会给指定URL回复交易信息,其中有一段是SIGN签名,使用MD5withRSA这个算法,接口文档上简单介绍了下算法。验证操作总结分三步:
1) 使用公钥进行签名的逆运算
2) 使用标准MD5算法运算原文
3) 比较1)、2)结果。
其中就卡在了第一步,参考了demo,demo里基本上都是在windows平台下验证的,其中代码如下:
$strSrc=$_POST['src'];
$strSign=$_POST['sign'];
$strPubKey=$_POST['pubkey'];

$rsasig=new COM("CCBRSA.RSASig");
$rsasig->setpublickey($strPubKey);
$strRet=$rsasig->StringVerifySigature($strSign,$strSrc);
也提供了一个CCBRSA.dll文件,但是这个文件在linux中不能用啊。
后来网上搜了一下,找到了这块代码:
$data = "POSID=000000000&BRANCHID=330000000&ORDERID=2004010061&PAYMENT=0.01&CURCODE=01&REMARK1=&REMARK2=&SUCCESS=N";$sign = "5bf88c409a13963286904e8954a4d825108f9b5bb60a8c8e5cfc05355fe4e247c777b521c7d68b8d51968285d51d1a0da0c5bd55e19268949a20dd7bd14f17422e41f3e6f7446d2136e10e796abc8b8a6f752bed5091374551d84d02f185aa3f9b516ac77ca319b06a8269389de6d7f677c619bfc0c89ccbcb125ae6dd7cc646";$public_key="pubkey.pem";$fp = fopen($public_key, "r");$public_key = fread($fp, 8192);fclose($fp);$pkeyid = openssl_get_publickey($public_key);$verifyResult = openssl_verify($data, pack("H",$sign),$pkeyid,OPENSSL_ALGO_MD5);openssl_free_key($pkeyid);echo $verifyResult;但是前提是得用java生成一个pem的文件:
就卡在了这里。
因为运行环境是lamp,所以那个dll文件不能用,java这个基本不会弄,不知道哪位大神能分享一下建行验证签名的demo呢?或者解决方法也可以啊,弄了两天了,头都大了

解决方案 »

  1.   

    这里是有个误区,首先你要在建行官网下载 pfx的文件,这个是私钥。可以通过IE将pfx的格式转换成 pem、cer两个格式的公钥文件这两个文件都有用的。
      

  2.   

    希望这个对你有帮助 http://www.bubuko.com/infodetail-368798.html