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设计模式之命令模式的深入解析
Jun 13 PHP
php生成随机数的三种方法
Sep 10 PHP
php实现删除空目录的方法
Mar 16 PHP
php安装swoole扩展的方法
Mar 19 PHP
7个鲜为人知却非常实用的PHP函数
Jul 01 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
Jul 09 PHP
php微信公众号js-sdk开发应用
Nov 28 PHP
浅谈php中curl、fsockopen的应用
Dec 10 PHP
PHP实现的简单适配器模式示例
Jun 22 PHP
PHP实现的简单sha1加密功能示例
Aug 27 PHP
PHP连接SQL server数据库测试脚本运行实例
Aug 24 PHP
PHP如何解决微信文章图片防盗链
Dec 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
2006/12/23 PHP
PHP开发中常用的三个表单验证函数使用小结
2010/03/03 PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
2013/06/26 PHP
is_uploaded_file函数引发的不能上传文件问题
2013/10/29 PHP
基于Swoole实现PHP与websocket聊天室
2016/08/03 PHP
laravel框架与其他框架的详细对比
2019/10/23 PHP
详解JavaScript中数组的相关知识
2015/07/29 Javascript
实例讲解js验证表单项是否为空的方法
2016/01/09 Javascript
jQuery1.9+中删除了live以后的替代方法
2016/06/17 Javascript
大型JavaScript应用程序架构设计模式
2016/06/29 Javascript
深入浅析search 搜索框的写法
2016/08/02 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
2020/03/26 Javascript
Kindeditor单独调用单图上传增加预览功能的实例
2017/07/31 Javascript
vue利用better-scroll实现轮播图与页面滚动详解
2017/10/20 Javascript
使用D3.js构建实时图形的示例代码
2018/08/28 Javascript
jQuery层叠选择器用法实例分析
2019/06/28 jQuery
微信小程序wx.request的简单封装
2019/11/13 Javascript
Element Card 卡片的具体使用
2020/07/26 Javascript
vue 在methods中调用mounted的实现操作
2020/08/07 Javascript
[01:46]DOTA2上海特锦赛小组赛英文解说KotlGuy采访
2016/02/27 DOTA
Python面向对象编程中的类和对象学习教程
2015/03/30 Python
python中尾递归用法实例详解
2015/04/28 Python
python使用pandas处理excel文件转为csv文件的方法示例
2019/07/18 Python
python:动态路由的Flask程序代码
2019/11/22 Python
python opencv图片编码为h264文件的实例
2019/12/12 Python
基于CSS3实现图片模糊过滤效果
2015/11/19 HTML / CSS
关于Assembly命名空间的三个面试题
2015/07/23 面试题
英文版网络工程师求职信
2013/10/28 职场文书
八年级历史教学反思
2014/01/10 职场文书
简历的自我评价
2014/02/03 职场文书
教师师德演讲稿
2014/05/06 职场文书
技校毕业生自荐信
2014/06/03 职场文书
银行转正自我鉴定
2014/09/29 职场文书
企业党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
幼儿园庆元旦主持词
2015/07/06 职场文书
vue实现简单数据双向绑定
2021/04/28 Vue.js