php对接java现实加签验签的实例


Posted in PHP onNovember 25, 2016

我实现的方法,主要是把java生成的密钥转为php能识别的pem格式的密钥,其它的加签、验签采用调用openssl内置签名方法。

java生成的密钥主要是字符串;而pem格式密钥是以64位为一行,并且带有如下头和尾的文件格式,然后php再去取得相对应pem格式字符串。

pem格式密钥

-----BEGIN PUBLIC KEY-----
//64chars一行(多行)
-----END PUBLIC KEY-----
-----BEGIN RSA PRIVATE KEY-----
//64chars一行(多行)
-----END RSA PRIVATE KEY-----

1.java密钥转为pem格式的php代码

/**
 * 将字符串格式公私钥格式化为pem格式公私钥
 * @param $secret_key
 * @param $type
 * @return string
 */
public static function format_secret_key($secret_key, $type){
  //64个英文字符后接换行符"\n",最后再接换行符"\n"
  $key = (wordwrap($secret_key, 64, "\n", true))."\n";
  //添加pem格式头和尾
  if ($type == 'pub') {
    $pem_key = "-----BEGIN PUBLIC KEY-----\n" . $key . "-----END PUBLIC KEY-----\n";
  }else if ($type == 'pri') {
    $pem_key = "-----BEGIN RSA PRIVATE KEY-----\n" . $key . "-----END RSA PRIVATE KEY-----\n";
  }else{
    echo('公私钥类型非法');
    exit();
  }
  return $pem_key;
}

2.加签

/**
 * RSA加签
 * @param $paramStr
 * @param $priKey
 * @return string
 */
public static function sign($paramStr, $priKey){
  $sign = '';
  //将字符串格式公私钥转为pem格式公私钥
  $priKeyPem = SignUtil::format_secret_key($priKey, 'pri');
  //转换为openssl密钥,必须是没有经过pkcs8转换的私钥
  $res = openssl_get_privatekey($priKeyPem);
  //调用openssl内置签名方法,生成签名$sign
  openssl_sign($paramStr, $sign, $res);
  //释放资源
  openssl_free_key($res);
  //base64编码签名
  $signBase64 = base64_encode($sign);
  //url编码签名
  $sign = urlencode($signBase64);
  return $sign;
}

3.验签

/**
 * RSA验签
 * @param $paramStr
 * @param $sign
 * @param $pubKey
 * @return bool
 */
public static function verify($paramStr, $sign, $pubKey) {
  //将字符串格式公私钥转为pem格式公私钥
  $pubKeyPem = SignUtil::format_secret_key($pubKey, 'pub');
  //转换为openssl密钥,必须是没有经过pkcs8转换的公钥
  $res = openssl_get_publickey($pubKeyPem);
  //url解码签名
  $signUrl = urldecode($sign);
  //base64解码签名
  $signBase64 = base64_decode($signUrl);
  //调用openssl内置方法验签,返回bool值
  $result = (bool)openssl_verify($paramStr, $signBase64, $res);
  //释放资源
  openssl_free_key($res);
  //返回资源是否成功
  return $result;
}

以上这篇php对接java现实加签验签的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php 服务器调试 Zend Debugger 的安装教程
Sep 25 PHP
phpphp图片采集后按原路径保存图片示例
Feb 18 PHP
php环境套包 dedeampz 伪静态设置示例
Mar 26 PHP
PHP不用递归遍历目录下所有文件的代码
Jul 04 PHP
php中adodbzip类实例
Dec 08 PHP
基于PHP给大家讲解防刷票的一些技巧
Nov 18 PHP
PHP屏蔽关键字实现方法
Nov 17 PHP
谈谈从phpinfo中能获取哪些值得注意的信息
Mar 28 PHP
PHP实现QQ登录的开原理和实现过程
Feb 04 PHP
阿里云Win2016安装Apache和PHP环境图文教程
Mar 11 PHP
laravel5.1 ajax post 传值_token示例
Oct 24 PHP
laravel框架使用阿里云短信发送消息操作示例
Feb 15 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
Nov 25 #PHP
php实现的网页版剪刀石头布游戏示例
Nov 25 #PHP
PHP用mysql_insert_id()函数获得刚插入数据或当前发布文章的ID
Nov 25 #PHP
基于CI框架的微信网页授权库示例
Nov 25 #PHP
php监测数据是否成功插入到Mysql数据库的方法
Nov 25 #PHP
thinkphp整合微信支付代码分享
Nov 24 #PHP
Yii2中使用asset压缩js,css文件的方法
Nov 24 #PHP
You might like
php-cli简介(不会Shell语言一样用Shell)
2013/06/03 PHP
实现在同一方法中获取当前方法中新赋值的session值解决方法
2014/06/26 PHP
详解Yii2 定制表单输入字段的标签和样式
2017/01/04 PHP
php利用imagemagick实现复古老照片效果实例
2017/02/16 PHP
JQuery 常用方法和事件详细介绍
2013/04/18 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
2015/02/17 Javascript
jquery插件jquery.beforeafter.js实现左右拖拽分隔条对比图片的方法
2015/08/07 Javascript
使用jQuery制作Web页面遮罩层插件的实例教程
2016/05/26 Javascript
在JSP中如何实现MD5加密的方法
2016/11/02 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
2017/04/14 jQuery
浅谈vuex之mutation和action的基本使用
2017/08/29 Javascript
JS实现深度优先搜索求解两点间最短路径
2019/01/17 Javascript
[01:00:14]DOTA2官方TI8总决赛纪录片 真视界True Sight
2019/01/16 DOTA
[05:37]DOTA2-DPC中国联赛 正赛 Elephant vs iG 选手采访
2021/03/11 DOTA
在Docker上开始部署Python应用的教程
2015/04/17 Python
python实现自动登录人人网并采集信息的方法
2015/06/28 Python
Python实现SVN的目录周期性备份实例
2015/07/17 Python
python实现NB-IoT模块远程控制
2018/06/20 Python
python中退出多层循环的方法
2018/11/27 Python
python解析xml简单示例
2019/06/21 Python
django表单的Widgets使用详解
2019/07/22 Python
Django框架表单操作实例分析
2019/11/04 Python
python 实现快速生成连续、随机字母列表
2019/11/28 Python
python手写均值滤波
2020/02/19 Python
python3用urllib抓取贴吧邮箱和QQ实例
2020/03/10 Python
Python数组拼接np.concatenate实现过程
2020/04/18 Python
PyQt5实现登录页面
2020/05/30 Python
华为消费者德国官方网站:HUAWEI德国
2020/11/03 全球购物
装饰资料员岗位职责
2013/12/30 职场文书
甜美蛋糕店创业计划书
2014/01/30 职场文书
2014年专项整治工作总结
2014/11/17 职场文书
催款律师函范文
2015/05/27 职场文书
会计试用期工作总结2015
2015/05/28 职场文书
2015年信息技术教研组工作总结
2015/07/22 职场文书
月考总结与反思
2015/10/22 职场文书
python 实现体质指数BMI计算
2021/05/26 Python