丁香医生

丁香要求的加密方式如下

<?phpnamespace app\api\controller;
use app\common\controller\Api;
/*** 示例接口*/
class Demo extends Api
{protected $noNeedLogin = ['*'];protected $noNeedRight = ['*'];/** @var string 版本 */protected $version = 'V1';/** @var string 客户编号 */protected $customId = '这里是客户编号,可以用测试的';/** @var string 请求的接口编号 请注意该值并不固定 每个接口不同 */protected $apiId = '接口是哪一一个';/** @var int 时间戳 */protected $timestamp;/** @var string 秘钥第二行的前48位 */protected $prefixPublicKey = '';/** @var string 加密算法 */protected $encryptType = 'AES-128-ECB';/** @var string 丁香公钥 */protected $publicKey = "";public function setTimestamp($timestamp): self{$this->timestamp = $timestamp;return $this;}/*** 拼接获取AES秘钥* @return string*/protected function getAesKey(): string{return $this->version . $this->customId . $this->apiId . $this->timestamp . $this->prefixPublicKey;}/*** 数据data加密* @ApiMethod (POST)*/public function test($timestamp, $data){return $this->setTimestamp($timestamp)->encode($data);}protected function encode(array $data){$data = openssl_encrypt(json_encode($data), $this->encryptType, $this->sha1prng($this->getAesKey()), OPENSSL_RAW_DATA);return base64_encode($data);}//SHA1PRNG算法protected function sha1prng(string $key){return substr(openssl_digest(openssl_digest($key, 'sha1', true), 'sha1', true), 0, 16);}/** aes解密* */public function aesJi($sStr){$a = $sStr['timestamp'];$sStr = $sStr['data'];$sKey = $this->version . $this->customId . $this->apiId  ."$a". $this->prefixPublicKey;$sKeys = self::sha1prng($sKey);$decrypted = openssl_decrypt(base64_decode($sStr), 'AES-128-ECB', $sKeys, OPENSSL_RAW_DATA);return $decrypted;}//rsa加签 sha1WithRSA 签名public function genSign(){//公钥拼接$cert = "-----BEGIN PUBLIC KEY-----\n" . $this->publicKey . "\n-----END PUBLIC KEY-----";//解析公钥$res = openssl_pkey_get_public($cert);//返回包含密钥详情的数组$detail = openssl_pkey_get_details($res);//释放密钥资源openssl_free_key($res);$encrypt_data = '';//使用公钥加密数据openssl_public_encrypt($this->getAesKey(), $encrypt_data, $detail['key']);$encrypt_data = base64_encode($encrypt_data);return $encrypt_data;}//校验 sha1WithRSA 解签public function verifySign($data){$data1 = base64_decode($data['sign']);
//        halt($data);$cert = "-----BEGIN PUBLIC KEY-----\n" . $this->publicKey . "\n-----END PUBLIC KEY-----";$encrypt_data = '';$pubKey = openssl_public_decrypt($data1,$encrypt_data,$cert);if ($pubKey){return $this->aesJi($data);}}// post请求public function postSend($res){header("Content-type: text/html; charset=utf-8");// 请求参数准备$url = "https://ygj.zydxcare.cn/manage/openapi/handle";$tojson = json_encode($res);$header[] = "Content-Type: application/json; charset=utf-8";$header[] = "Data-signature:C80310638874448266292D70EFA9340C";$header[] = "Time-stamp:1515577396000";
//        print_r($tojson);die();//初始化$ch = curl_init();// 设置请求地址curl_setopt($ch, CURLOPT_URL, $url);// 设置头文件curl_setopt($ch, CURLOPT_HTTPHEADER, $header);// 设置获取的信息以文件流的形式返回,而不是直接输出。curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// 设置POST形式传参$a = curl_setopt($ch, CURLOPT_POST, 1);// 设置POST请求参数curl_setopt($ch, CURLOPT_POSTFIELDS, $tojson);// 设置ssl请求curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
//        var_dump(curl_error($ch));// 开始CURL请求$data = curl_exec($ch);// 关闭URL请求curl_close($ch);//        print_r($data);die();//打印获得的数据$data = json_decode($data,true);if (empty($data['code'])){$this->error('错误');}return $data;}//拼接数据public function index(){$res = request()->post();$timestamp = $res['timestamp'];$da = $res['data'];$res['data'] = $this->test($timestamp, $da);$sign = $this->genSign();$data = ["apiId" => $res['apiId'],"customId" => $this->customId,"timestamp" => $res['timestamp'],"version" => $this->version,"data" => $res['data'],"sign" => $sign];$information = $this->postSend($data);return $this->verifySign($information);}}

请求如下

php对接java接口(丁香医生)aes加解密-PKCS5Padding,rsa加解密相关推荐

  1. java android rsa加密解密_Android RSA加密解密

    转载 http://blog.csdn.net/bbld_/article/details/38777491 RSA是目前最有影响力的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十 ...

  2. js java rsa 解密,JS RSA 公钥解密

    JS RSA 公钥解密 需求 后台使用私钥加密数据,然后前端使用公钥解密,也不知道怎么搞出来的这种需求,感觉很不符合逻辑.我对RSA的理解为:公钥负责加密,私钥负责解密.签名的话,私钥负责签名,公钥负 ...

  3. java安全接口调用_步骤3:调用Java接口

    本文档主要介绍了通过调用Java接口生成工作密钥和进行通用数据加解密的操作方法. 整体流程 初始化SDK.具体内容请参见 配置Java接口.具体内容请参见 初始化SDK 使用以下方法初始化SDK.hs ...

  4. java RSA加密解密实现(含分段加密)

    该工具类中用到了BASE64,需要借助第三方类库:javabase64-1.3.1.jar 下载地址:http://download.csdn.net/detail/centralperk/50255 ...

  5. java金蝶星空云金蝶Java 对接 金蝶云星空 接口 对接 金蝶API 对接 金蝶 接口 解决 会话失效 问题 会话已失效,请重新登录

    java金蝶星空云金蝶Java 对接 金蝶云星空 接口 对接 金蝶API 对接 金蝶 接口 解决 会话失效 问题 会话已失效,请重新登录 1.准备工作 1.1 接口调用账户 1.2 下载 金蝶星空云 ...

  6. 对接第三方平台JAVA接口问题推送和解决

    对接第三方平台JAVA接口问题推送和解决 参考文章: (1)对接第三方平台JAVA接口问题推送和解决 (2)https://www.cnblogs.com/CreateMyself/p/7295879 ...

  7. angular和JAVA实现aes、rsa加密解密,前后端交互,前端加解密和后端JAVA加解密实现

    今天实现了下AES和RSA加密解密,主要的功能是对前后端交互数据进行加密解密,为什么要用到两个算法呢,首先RSA默认的话加密长度是有限的100多个byte吧大约,并且需要公钥私钥,而AES加密没有限制 ...

  8. Java实现对称加密算法-AES加解密

    AES(Advanced Encryption Standard)意思是高级加密标准,是一种区块加密标准.这个标准用来替代原先的DES,且已经被广泛使用. DES使用56位密钥,所以比较容易被破解. ...

  9. java接口对接——别人调用我们接口获取数据

    java接口对接--别人调用我们接口获取数据,我们需要在我们系统中开发几个接口,给对方接口规范文档,包括访问我们的接口地址,以及入参名称和格式,还有我们的返回的状态的情况, 接口代码: package ...

最新文章

  1. Ubuntu 无线密码破解利器aircrack-ng
  2. 2021暑假每日一题 【week8 完结】
  3. window安装mysql5.7解压版(解决乱码问题)
  4. Effective Java之列表由于数组(二十五)
  5. Replace Type Code with State/Strategy(以State/Strategy取代类型码)
  6. Code POJ - 1780(栈模拟dfs)
  7. 行为型模式之 状态模式
  8. 无连接可靠传输_计算机网络-网络层和传输层
  9. 老罗Android开发视频教程_基于JavaSE开发(适合Android初学者菜鸟级别的人)
  10. 在HTML 页面中如何显示带圈圈的数字
  11. 黑月教主工具脱水印_一键去水印!傻瓜式图片处理工具Inpaint
  12. 防火墙结构之屏蔽主机体系结构
  13. JS 三级联动之 省市县。
  14. Win10微信打不开小程序,其他程序出现找不到HID.DLL的解决办法
  15. 在炼数成金报名的课程!加油!
  16. 用户的登陆认证、DjangoRestFramework JWT多条件登录,导航栏实现
  17. python羊车门问题_python羊车门问题的正确解答
  18. 云展网教程 | 如何将电子杂志发布到微信公众平台?
  19. VC++实现打开文件和打开所在文件夹的功能(附源码)
  20. 一正云系统服务器搭建,腾正云服务器

热门文章

  1. 已知二叉树的后序序列和中序序列,求先序序列。
  2. ‘npm‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。
  3. 路由器redirect 配置_新页软件:如何设定双层以上路由器互联网模式
  4. matlab矩阵的合并
  5. 动态网页(JSP 文件)如何连接数据库(SQL Server)--看这里
  6. ORA-04031: 无法分配 3840 字节的共享内存 (“shared pool“,“unknown object“,“sga heap(1,0)“,“kglsim object batch“)
  7. 四面阿里Java高级研发岗,定级P7:数据结构+分布式+JVM+线程
  8. 解决办法:git错误 error: failed to push some refs to 'https://github.com/...
  9. Windows CMD命令添加开机启动项
  10. IntelliJ IDEA集成svn