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 相关文章推荐
模拟SQLSERVER的两个函数:dateadd(),datediff()
Oct 09 PHP
mysql5详细安装教程
Jan 15 PHP
某大型网络公司应聘时的笔试题目附答案
Mar 27 PHP
php页码形式分页函数支持静态化地址及ajax分页
Mar 28 PHP
Thinkphp多文件上传实现方法
Oct 31 PHP
php将文件夹打包成zip文件的简单实现方法
Oct 04 PHP
Yii2中添加全局函数的方法分析
May 04 PHP
PHP编程计算文件或数组中单词出现频率的方法
May 22 PHP
thinkphp3.2.0 setInc方法 源码全面解析
Jan 29 PHP
PHP+redis实现的购物车单例类示例
Feb 02 PHP
php和nginx交互实例讲解
Sep 24 PHP
PHP7 整型处理机制修改
Mar 09 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开发中AJAX技术的简单应用
2015/12/11 PHP
PHP编程入门的基本语法知识点总结
2016/01/26 PHP
php微信支付接口开发程序
2016/08/02 PHP
js调用activeX获取u盘序列号的代码
2011/11/21 Javascript
window.event快达到全浏览器支持了,以后使用就方便了
2011/11/30 Javascript
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
2012/01/15 Javascript
网页运行时提示对象不支持abigimage属性或方法
2014/08/10 Javascript
jQuery使用prepend()方法在元素前添加内容用法实例
2015/03/26 Javascript
基于JS实现导航条flash导航条
2016/06/17 Javascript
JavaScript实现拖拽元素对齐到网格(每次移动固定距离)
2016/11/30 Javascript
微信小程序 swiper制作tab切换实现附源码
2017/01/21 Javascript
jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例
2018/05/09 jQuery
Vue.js点击切换按钮改变内容的实例讲解
2018/08/22 Javascript
Vue-CLI3.x 设置反向代理的方法
2018/12/06 Javascript
Vue 递归多级菜单的实例代码
2019/05/05 Javascript
vue使用自定义指令实现拖拽
2021/01/29 Javascript
解决vuex数据异步造成初始化的时候没值报错问题
2019/11/13 Javascript
[03:09]2014DOTA2国际邀请赛 赛场上的美丽风景线 中国Coser也爱DOTA2
2014/07/20 DOTA
[02:42]决战东方!DOTA2亚洲邀请赛重启荣耀之争
2017/03/17 DOTA
详解Python中open()函数指定文件打开方式的用法
2016/06/04 Python
基于ID3决策树算法的实现(Python版)
2017/05/31 Python
HTML5拖拽功能实现的拼图游戏
2018/07/31 HTML / CSS
阿提哈德航空官方网站:Etihad Airways
2017/01/06 全球购物
世界知名接发和假发品牌:Poze Hair
2017/03/08 全球购物
存储过程和函数的区别
2013/05/28 面试题
Linux中如何用命令创建目录
2015/01/12 面试题
Ejb技术面试题
2015/04/29 面试题
公司会计主管岗位责任制
2014/03/01 职场文书
校园歌咏比赛主持词
2014/03/18 职场文书
旅游与酒店管理专业求职信
2014/07/21 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
群众路线批评与自我批评发言稿
2014/10/16 职场文书
年度考核登记表个人总结
2015/03/06 职场文书
教你使用Python获取QQ音乐某个歌手的歌单
2022/04/03 Python
阿里云k8s服务升级时502错误 springboot项目应用
2022/04/09 Servers
maven 解包依赖项中的文件的解决方法
2022/07/15 Java/Android