#### 直接上代碼,解決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