#### 直接上代码,解决RSA分段加密PHP的问题
```php
<?php
/**
* 电子保单查示例
*/
namespace app\inter\controller;
class Demo
{
/*I云服配置*/
protected $partner = '54**55'; /*正式版*/
protected $key = 'iyb91e**5869a98'; /*正式版*/
protected $dianzibaodan='https://open.firstbx.com/open/v3/route/baoyunChkEncryptSign'; /*正式版*/
protected $uniqueid='C4IpXquJ**P3PrjOPDbPq'; /*正式版*/
protected $publickey='MIGfMA0GCSq**DQEBAQUAA4GNADCBiQKBgQCyzA4ZV7+hQxkaBKxaOxB1r7roIcc5npvf+uMkpkmm8x1ALp/zoeXK83Vuda/ZU0mnAu5IVR4VovDAM6A5Aea2GLBkJbGisMX0LcpCBNYWkTrXK7VarH05oJWuO0nP7leGHg2zB0IS0PRj2v8MoDci8PeRaAQiUaDjB1ZZkpeO4QIDAQAB'; /*正式版*/
protected $selfkey='MIICdwIBADAN**hkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKeAZpfNjU3aTuOfkjA1HppEA52CMZdA2uJLCyzFp4yexbvdpuBiVl2tP5bvrkcXeYHEJxNyxrwKeGcyzXoaC7IDFrXOwDrF964Dsx2CXJcoCqx2Q7uCMKIBrCsHdM3V6U9A2ceS34VUkIZ4pfv7QbFofLsQpHf2EDTAMGS29P4lAgMBAAECgYBP6xaIFV33KFL9jfQtJhsc1Zi3/Rd2KE6HK/EAAqpnkJWdhisJ4kF83p15gZAwgUXLIXDXearSq1g5POcG/AhZtI98QIJWXZeiiCOayfxz6mrvIJMAmonThPOQVg+Rl+AEA160ne5MSdQAVtICeiWU3DkyxX3QziX43gYYRo+rHQJBAPsfwCtOqjyq0x8tl/VJlqz2xspDxQIlkfzgj38sZOQh9IgRSKC8Oq0gzQQVgGj0YR04BINkXnAuXyvLawmuyeMCQQCqwP4BcTJ8ASYNJxOoFMuvCKbjvoXG3Zl9JNXmlO2+FLTPA2S3tTDUxhaEx69zjRL5jaKLk09m7cmHRVzdjbZXAkEA5+47HcRZlg5vTqxdXD3K25RPpR9SJNluK496+ImX5Ns3bTQJT+qIhr10nAD/x+9sgf/qqy9XyWQKofgNs7Oq4QJABgQYrupTEgVkVtBKpABfkMIoRxveULxb/QnAM4iJu8m0+RowgTx0BPsZrgHvD44n3fz8fhhpksHL+OUbuX6VrwJBAKQl6s/q803PAWHQjvpmdF7aj3pHJXFeTkhmHNKlmk8kaj7v9TNTe1GWRdUjcyrLTftINHRO2dgzEHQZITnMo6k='; /*正式版*/
/*RSA分段加密*/
protected function iyyencrypt($originalData){
$publicKey = self::get_public_key($this->publickey);
$crypto = '';
foreach (str_split($originalData, 117) as $chunk) {
$encryptData = '';
if(openssl_public_encrypt($chunk, $encryptData, $publicKey)){
$crypto .= $encryptData;
}else{
die('加密失败');
}
}
return base64_encode($crypto);
}
/*RSA分段解密*/
protected function iyydecrypt($encryptData){
$privateKey = self::get_private_key($this->selfkey);
$decryptData = '';
$crypto = '';
foreach (str_split(base64_decode($encryptData), 128) as $chunk) {
if(openssl_private_decrypt($chunk, $decryptData, $privateKey)){
$crypto .= $decryptData;
}else{
die('解密失败');
}
}
return $crypto;
}
/**获取私有key字符串 重新格式化 为保证任何key都可以识别*/
protected function get_private_key($private_key){
$search = array(
"-----BEGIN RSA PRIVATE KEY-----", //自定义头部
"-----END RSA PRIVATE KEY-----", //自定义尾部
"\n",
"\r",
"\r\n"
);
$private_key=str_replace($search,"",$private_key);
return $search[0] . PHP_EOL . wordwrap($private_key, 64, "\n", true) . PHP_EOL .$search[1];
}
/**获取公共key字符串 重新格式化 为保证任何key都可以识别*/
protected function get_public_key($public_key){
$search = array(
"-----BEGIN PUBLIC KEY-----", //自定义头部
"-----END PUBLIC KEY-----", //自定义尾部
"\n",
"\r",
"\r\n"
);
$public_key=str_replace($search,"",$public_key);
return $search[0] . PHP_EOL . wordwrap($public_key, 64, "\n", true) . PHP_EOL . $search[1];
}
/**
* @param $data
* @return string
* 生成签名
*/
protected function setSign($data){
return md5($data.$this->key);
}
/**
* @param string $url post请求地址
* @param array $params
* @return mixed
*/
protected function curl_post($url, array $params = array())
{
$data_string = json_encode($params);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt(
$ch, CURLOPT_HTTPHEADER,
array(
'Content-Type: application/json'
)
);
$data = curl_exec($ch);
curl_close($ch);
return ($data);
}
/**
* 电子保单查询 IH1100015011824503
* RSA 加密解密是核心 https://www.cnblogs.com/makalochen/p/10845033.html
*/
public function getPolicyList(){
$params = Request::instance()->param(); /*接收数据,不同框架不一样,这个是用的TP5*/
$data = [
'uniqueId' => $this->uniqueid,
'policyNo' => $params['policyNo'],
'partner' => $this->partner,
'queryType' => 'newElectronicPolicy'
];
$data=self::iyyencrypt(json_encode($data));
$sign = self::setSign($data);
$parameter['data'] = $data;
$parameter['sign'] = $sign;
$parameter['partner'] = $this->partner;
$rest = self::curl_post($this->dianzibaodan,$parameter);
$result = json_decode($rest,true);
// string(355) "{"insurantName":"俞帅","finishTime":"2022-01-19
//23:59:59.0","policyId":"236501959","attributorName":"李秀珍","effectiveTime":"2021-01-20
//00:00:00.0","electronicPolicyUrl":"https://passport-uat.iyunbao.com/m/auth/common_auth_message?token=1366689652517371904","policyNo":"IH1100015011824503","applicantName":"俞帅","productName":"尊享e生2020版"}"
if ($result['code']==0){
//私钥解密
$datas=self::iyydecrypt($result['data']);
$datainfo=json_decode($datas,true);
if($datainfo['electronicPolicyUrl']){
return json(['code'=>1,'data'=>$datainfo,'msg'=>'成功']);
}else{
return json(['code'=>0,'msg'=>'暂无电子保单','data'=>'']);
}
}else{
return json(['code'=>0,'msg'=>'接口调用失败...','data'=>'']);
}
}
}
```
- 支付宝身份验证接口踩坑实录-PHP(基于ThinkPHP5)(第二版更新中)
- 抖音小程序开发之授权登录+支付宝支付+微信支付(ThinkPHP5-第三版修订中)
- TP5小知识点锦集(长期更新)
- PHP 二维码生成+识别
- 高德地图点聚合点击事件以及内容渲染
- ThinkPhP5使用phpexcle 导出数据(复制粘贴就可使用)
- Fastadmin微信小程序授权登录+获取手机号插件
- PHP -AES-128-CBC位加密解密
- PHP-Rsa分段加密解密(ThinkPHP5)
- PHP大转盘抽奖代码片段
- Fastadmin 项目上线关闭调试模式注意事项(记一次require-table.js修改事件)
- ThinkPHP5条件查询FIND_IN_SET正反使用
- ThinkPhP5整合微信小程序订阅消息
- think-queue处理延时任务事件
- ThinkPHP5 生成二维码
- Python3定时监控指定文件内容变换-(增加多行,遍历每行进行逻辑分析处理)
- Python3开发声光报警器监控触发报警
- ThinkPHP5下载文件流到本地
- 百度鹰眼抽轨迹集合稀算法&缩放比例调整显示静态图(ThinkPHP5)
- PHP 导出Excle
- Fastadmin 自定义Tab选项卡(B表的条件查询A表的数据,在A表里面加B表的参数作为选项卡)
- Fastadmin 修改url组件跳转为复制功能
- 微信H5分享好友跟朋友圈-基于Easywechat
- Python3抓取监控日志文件关键词跟内容变化修正版
- ThinkPHP5上传图片压缩处理-(解决IOS拍照上传旋转90度问题)最近更新2021年12月9日11:35:07
- 二维数组根据‘key’分组为新的三维数组
- ThinkPHP5 成功部署Workerman 运行示例
- Fastadmin框架TOKEN的使用
- ThinkPHP5 -微信小程序订阅消息开发-插件(插件基于fastadmin开发)
- ThinkPHP5-文本转义emoji表情
- ThinkPHP5 自定义命令行处理 监听Redis key失效触发回调事件,实现延迟任务 实现自动取消订单,自动完成订单
- Fastadmin插件Shopro商城里面短信插件修改为腾讯云短信插件步骤
- Fastadmin框架自定义搜索操作流程
- ThinkPHP5 处理 微信小程序内容安全审核
- Fastadmin自定义快捷搜索之模糊搜索关联他表
- php根据年月获取指定月份天数及日期数组的方法
- PHP构造函数使用校验token
- 基于ThinkPHP5&Redis腾讯云短信验证码注册登录基础业务逻辑代码整合
- ThinkPHP 解决跨域问题
- 支付宝沙箱环境测试支付(好久没做都忘了,写个博客比较省事)
- ThinkPHP5生成抖音小程序带参数二维码
- ThinkPHP5导入Excle-简单丝滑
- PHP生成带参数的小程序二维码
- ThinkPHP5成功调通IOS苹果支付
- swoole写聊天室,简单粗暴
- 微信小程序内容安全鉴别的时候,不成功因为没有转码
- Fastadmin 后台Excle文件上传(更新新增功能)
- Lnmp 配置thinkphp5 Nginx基础设置,包含http+https配置
- 通过经纬度获取数据库信息自动计算地址距离远近
- 二维数组根据某个字段排序
- PHP二维数组去重,最简单的方法
- TP5微信redis列队群发模板消息Sendmsg
- PHP检测是否关注公众号,亲测可用
- 小程序推广分享带参数二维码生成
- 基于ThinkPHP5微信H5授权登录获取用户信息(改进版)
- php过滤微信昵称中的表情
- Socket.io