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 函数使用方法与函数定义方法
May 09 PHP
《PHP编程最快明白》第二讲 数字、浮点、布尔型、字符串和数组
Nov 01 PHP
PHP实现邮件群发的源码
Jun 18 PHP
PHP之sprintf函数用法详解
Nov 12 PHP
php备份数据库类分享
Apr 14 PHP
php实现比较全的数据库操作类
Jun 18 PHP
php多重接口的实现方法
Jun 20 PHP
PHP实现留言板功能的详细代码
Mar 25 PHP
PHP实现Session入库/存入redis的方法
May 04 PHP
浅析PHP数据导出知识点
Feb 17 PHP
Yii框架通过请求组件处理get,post请求的方法分析
Sep 03 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集成环境xampp中apache无法启动问题解决方案
2014/11/18 PHP
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
2016/03/01 PHP
不要小看注释掉的JS 引起的安全问题
2008/12/27 Javascript
js弹窗代码 可以指定弹出间隔
2010/07/03 Javascript
iframe 异步加载技术及性能分析
2011/07/19 Javascript
JavaScript返回当前会话cookie全部键值对照的方法
2015/04/03 Javascript
基于JS实现的倒计时程序实例
2015/07/24 Javascript
jquery可定制的在线UEditor编辑器
2015/11/17 Javascript
js简单时间比较的方法
2016/08/02 Javascript
Bootstrapvalidator校验、校验清除重置的实现代码(推荐)
2016/09/28 Javascript
JavaScript浏览器对象模型BOM(BrowserObjectModel)实例详解
2016/11/29 Javascript
jQuery实现简单漂亮的Nav导航菜单效果
2017/03/29 jQuery
Vue组件通信之Bus的具体使用
2017/12/28 Javascript
JS滚轮控制图片缩放大小和拖动的实例代码
2018/11/20 Javascript
微信小程序实现树莓派(raspberry pi)小车控制
2020/02/12 Javascript
Element-ui树形控件el-tree自定义增删改和局部刷新及懒加载操作
2020/08/31 Javascript
基于postman获取动态数据过程详解
2020/09/08 Javascript
[02:05]2014DOTA2西雅图邀请赛 专访啸天mik夫妻档
2014/07/08 DOTA
详尽讲述用Python的Django框架测试驱动开发的教程
2015/04/22 Python
python3.7 的新特性详解
2019/07/25 Python
Python Web框架之Django框架Form组件用法详解
2019/08/16 Python
Python图像阈值化处理及算法比对实例解析
2020/06/19 Python
Python中的特殊方法以及应用详解
2020/09/20 Python
基于Python实现粒子滤波效果
2020/12/01 Python
CSS3 滤镜 webkit-filter详细介绍及使用方法
2012/12/27 HTML / CSS
戴森美国官网:Dyson美国
2016/09/11 全球购物
Mountain Hardwear官网:攀岩服装和户外装备
2019/09/26 全球购物
简述索引存取方法的作用和建立索引的原则
2013/03/26 面试题
简历的自荐信
2013/12/19 职场文书
法学毕业生自我鉴定
2014/01/31 职场文书
毕业生求职信
2014/06/10 职场文书
韩语专业职业生涯规划范文:成功之路就在我们脚下
2014/09/11 职场文书
走群众路线学习笔记
2014/11/06 职场文书
违规违纪检讨书范文
2015/05/06 职场文书
社会主义核心价值观主题教育活动总结
2015/05/07 职场文书
学校捐款活动总结
2015/05/09 职场文书