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之第六天
Oct 09 PHP
杏林同学录(二)
Oct 09 PHP
PHP+APACHE实现用户论证的方法
Oct 09 PHP
PHP中使用循环实现的金字塔图形
Nov 08 PHP
php metaphone()函数及php localeconv() 函数实例解析
May 15 PHP
PHP性能优化大全(php.ini)
May 20 PHP
PHP用FTP类上传文件视频等的简单实现方法
Sep 23 PHP
数组任意位置插入元素,删除特定元素的实例
Mar 02 PHP
php数值转换时间及时间转换数值用法示例
May 18 PHP
利用php获得flv视频长度的实例代码
Oct 26 PHP
使用PHP开发留言板功能
Nov 19 PHP
PHP正则之正向预查与反向预查讲解与实例
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打开文件fopen函数的使用说明
2013/07/05 PHP
php mysqli查询语句返回值类型实例分析
2016/06/29 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
PHP常见的几种攻击方式实例小结
2019/04/29 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
2020/09/17 PHP
javascript 用记忆函数快速计算递归函数
2010/03/15 Javascript
js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
2013/01/24 Javascript
javascript中数组的sort()方法的使用介绍
2013/12/18 Javascript
使用js操作css实现js改变背景图片示例
2014/03/10 Javascript
JavaScript用select实现日期控件
2015/07/17 Javascript
AngularJS基础 ng-include 指令简单示例
2016/08/01 Javascript
详解vue 中使用 AJAX获取数据的方法
2017/01/18 Javascript
JavaScript实现瀑布流以及加载效果
2017/02/11 Javascript
vue.js 底部导航栏 一级路由显示 子路由不显示的解决方法
2018/03/09 Javascript
vue路由事件beforeRouteLeave及组件内定时器的清除方法
2018/09/29 Javascript
Vue组件之高德地图地址选择功能的实例代码
2019/06/21 Javascript
JavaScript复制变量三种方法实例详解
2020/01/09 Javascript
Javascript异步流程控制之串行执行详解
2020/09/27 Javascript
浅谈js数组splice删除某个元素爬坑
2020/10/14 Javascript
小小聊天室Python代码实现
2016/08/17 Python
Python3 单行多行万能正则匹配方法
2019/01/07 Python
python可视化实现代码
2019/01/15 Python
python数值基础知识浅析
2019/11/19 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
2021/01/21 Python
护理职业应聘自荐书
2013/09/29 职场文书
个人现实表现材料
2014/02/04 职场文书
大二法学专业职业生涯规划范文
2014/02/12 职场文书
大学老师推荐信
2014/02/25 职场文书
团结就是力量演讲稿
2014/05/21 职场文书
医院标语大全
2014/06/23 职场文书
政风行风评议工作总结
2014/10/21 职场文书
幼儿园五一劳动节活动总结
2015/02/09 职场文书
七夕情人节问候语
2015/11/11 职场文书
车辆挂靠协议书
2016/03/23 职场文书
利用Python判断整数是否是回文数的3种方法总结
2021/07/07 Python
python 闭包函数详细介绍
2022/04/19 Python