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设计模式 Bridge (桥接模式)
Jun 26 PHP
php入门学习知识点一 PHP与MYSql连接与查询
Jul 14 PHP
php安全配置 如何配置使其更安全
Dec 16 PHP
PHP 使用header函数设置HTTP头的示例解析 表头
Jun 17 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
Jul 22 PHP
php准确计算复活节日期的方法
Apr 18 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
Apr 21 PHP
你应该知道PHP浮点数知识
May 13 PHP
PHP的Laravel框架中使用消息队列queue及异步队列的方法
Mar 21 PHP
Yii2 ActiveRecord多表关联及多表关联搜索的实现
Jun 30 PHP
php cookie用户登录的详解及实例代码
Jan 03 PHP
thinkPHP5.0框架安装教程
Mar 25 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
解决phpmyadmin中文乱码问题。。。
2007/01/18 PHP
ajax取消挂起请求的处理方法
2013/03/18 PHP
php对称加密算法示例
2014/05/07 PHP
php实现的支持断点续传的文件下载类
2014/09/23 PHP
PHP获取当前完整URL地址的函数
2014/12/21 PHP
php等比例缩放图片及剪切图片代码分享
2016/02/13 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
2016/10/31 PHP
关于全局变量和局部变量的那些事
2013/01/11 Javascript
JS中Date日期函数中的参数使用介绍
2014/01/02 Javascript
jquery教程限制文本框只能输入数字和小数点示例分享
2014/01/13 Javascript
Jquery+asp.net后台数据传到前台js进行解析的方法
2014/05/11 Javascript
Vue指令的钩子函数使用方法
2017/03/20 Javascript
Angularjs 双向绑定时字符串的转换成数字类型的问题
2017/06/12 Javascript
Vue的MVVM实现方法
2017/08/16 Javascript
详解js正则表达式验证时间格式xxxx-xx-xx形式
2018/02/09 Javascript
微信小程序实现文字从右向左无限滚动
2020/11/18 Javascript
微信小程序如何再次获取用户授权的方法
2019/05/10 Javascript
webpack优化之代码分割与公共代码提取详解
2019/11/22 Javascript
Python实现在线程里运行scrapy的方法
2015/04/07 Python
python压缩文件夹内所有文件为zip文件的方法
2015/06/20 Python
Python多进程机制实例详解
2015/07/02 Python
Python排序算法实例代码
2017/08/10 Python
python安装模块如何通过setup.py安装(超简单)
2018/05/05 Python
解决matplotlib库show()方法不显示图片的问题
2018/05/24 Python
numpy.linspace 生成等差数组的方法
2018/07/02 Python
Django框架首页和登录页分离操作示例
2019/05/28 Python
Windows10下 python3.7 安装 facenet的教程
2019/09/10 Python
Python批量安装卸载1000个apk的方法
2020/04/10 Python
Python爬虫JSON及JSONPath运行原理详解
2020/06/04 Python
Python自动化操作实现图例绘制
2020/07/09 Python
CSS3 实现发光边框特效
2020/11/11 HTML / CSS
销售工作人员的自我评价分享
2013/11/10 职场文书
移动通信专业自荐信范文
2013/11/12 职场文书
服务员岗位责任制
2014/02/11 职场文书
学校师德承诺书
2014/05/23 职场文书
员工离职证明范本
2015/06/12 职场文书