一、最近有项目接入了第四方支付,第四方支付提供的文档需要两边进行openssl配合私钥、公钥进行RSA加密来双方通信
创新互联是一家集网站建设,双桥企业网站建设,双桥品牌网站建设,网站定制,双桥网站建设报价,网络营销,网络优化,双桥网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。二、环境说明
1、LAMP、LNMP都可以,我的环境暂时是LAMP
2、php先安装openssl扩展,否则使用函数会报错,具体openssl扩展可以去百度或者参考博客文档
三、代码实现
1、发送加密数据
//加密
//组成加密数据
$arr = array(
'name' => 'test', //第三方平台的会员账号
'password' => 'test', //第三方平台的会员密码
'amount' => '100', //转账金额,最低100,为100的整数倍
'order_sn' => '123456789abc', //数商交易所生成的订单号(第三方平台在处理完毕后需要回传)
'sign' => '86e06157205d5155f5fdddcf077604fd', //数商交易所生成的sign(第三方平台在处理完毕后需要回传)
);
//先转成json格式的数据
$arr = json_encode($arr);
//根据私钥获取加密字符串
$key = "私钥内容串";
$res = "-----BEGIN PUBLIC KEY-----\n" .
wordwrap($key, 64, "\n", true) .
"\n-----END PUBLIC KEY-----";
openssl_private_encrypt($arr, $data, $res);
//base64编码
$data = base64_encode($data);
//发送POST请求
$to_arr = array(
'data' => $data
);
//POST请求忽略
2、获取加密串解密
//解密
$data = "第四方返回的data加密串";
$key= "第四方提供的公钥内容串";
$res = "-----BEGIN PUBLIC KEY-----\n" .
wordwrap($pubKey, 64, "\n", true) .
"\n-----END PUBLIC KEY-----";
//解密字符串
$crypto = '';
foreach (str_split(base64_decode($data), 128) as $chunk) {
openssl_public_decrypt($chunk, $decryptData, $res);//$decryptData为解密后的数据
$crypto .= $decryptData;
}
//解析json数据得到数组
$arr = json_decode($crypto);
//打印结果
var_dump($arr);
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。