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 相关文章推荐
WindowsXP中快速配置Apache+PHP5+Mysql
Jun 05 PHP
PHP 截取字符串 分别适合GB2312和UTF8编码情况
Feb 12 PHP
PHP页面间参数传递的四种方法详解
Jun 09 PHP
PHP使用CURL获取302跳转后的地址实例
May 04 PHP
PHP中通过trigger_error触发PHP错误示例
Jun 23 PHP
PHP实现批量修改文件后缀名的方法
Jul 30 PHP
PHP+Mysql+jQuery查询和列表框选择操作实例讲解
Oct 22 PHP
php判断手机浏览还是web浏览,并执行相应的动作简单实例
Jul 28 PHP
thinkPHP js文件中U方法不被解析问题的解决方法
Dec 05 PHP
Referer原理与图片防盗链实现方法详解
Jul 03 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
Mar 30 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
Apr 06 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 echo()和print()、require()和include()函数区别说明
2010/03/27 PHP
深入phpMyAdmin的安装与配置的详细步骤
2013/05/07 PHP
PHP curl使用实例
2015/07/02 PHP
php语法检查的方法总结
2019/01/21 PHP
Laravel 前端资源配置教程
2019/10/18 PHP
一个简单的JavaScript数据缓存系统实现代码
2010/10/24 Javascript
利用JS实现浏览器的title闪烁
2013/07/08 Javascript
JavaScript instanceof 的使用方法示例介绍
2013/10/23 Javascript
js对列表中第一个值处理与jsp页面对列表中第一个值处理的区别详解
2013/11/05 Javascript
jQuery实现HTML表格单元格的合并功能
2016/04/06 Javascript
js和jQuery设置Opacity半透明 兼容IE6
2016/05/24 Javascript
node.js 动态执行脚本
2016/06/02 Javascript
React实现点击删除列表中对应项
2017/01/10 Javascript
JS中如何实现点击a标签返回页面顶部的问题
2017/01/19 Javascript
详解从angular-cli:1.0.0-beta.28.3升级到@angular/cli:1.0.0
2017/05/22 Javascript
vue+高德地图实现地图搜索及点击定位操作
2020/09/09 Javascript
[05:05]给小松五分钟系列 第二期介绍为什么打DOTA2
2014/07/02 DOTA
[43:57]Liquid vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
python实现去除下载电影和电视剧文件名中的多余字符的方法
2014/09/23 Python
Python中datetime常用时间处理方法
2015/06/15 Python
Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
2017/07/20 Python
mac系统安装Python3初体验
2018/01/02 Python
设置python3为默认python的方法
2018/10/31 Python
解决flask接口返回的内容中文乱码的问题
2020/04/03 Python
美国最大的网络男装服装品牌:Bonobos
2017/05/25 全球购物
Bealls Florida百货商店:生活服饰、家居装饰和鞋子
2018/02/23 全球购物
独特的礼品和创新的科技产品:The Grommet
2018/02/24 全球购物
新员工培训个人的自我评价
2013/10/09 职场文书
自我介绍演讲稿
2014/01/15 职场文书
安全标准化实施方案
2014/02/20 职场文书
派出所副所长四风问题个人整改措施思想汇报
2014/10/13 职场文书
入党宣誓大会后的感想
2015/08/10 职场文书
公务员廉洁从政心得体会
2016/01/19 职场文书
导游词之天津盘山
2019/11/01 职场文书
Java获取e.printStackTrace()打印的信息方式
2021/08/07 Java/Android
tomcat正常启动但网页却无法访问的几种解决方法
2022/05/06 Servers