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 相关文章推荐
3种平台下安装php4经验点滴
Oct 09 PHP
IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成)
Dec 06 PHP
php REMOTE_ADDR之获取访客IP的代码
Apr 22 PHP
php动态生成函数示例
Mar 21 PHP
PHP curl CURLOPT_RETURNTRANSFER参数的作用使用实例
Feb 07 PHP
php中instanceof 与 is_a()区别分析
Mar 03 PHP
php防止sql注入简单分析
Mar 18 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
Apr 30 PHP
PHP实现生成带背景的图形验证码功能
Oct 03 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
Sep 04 PHP
PHP架构及原理知识点详解
Dec 22 PHP
Laravel 5.1 框架Blade模板引擎用法实例分析
Jan 04 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正确配置mysql(apache环境)
2011/08/28 PHP
用php制作简单分页(从数据库读取记录)的方法详解
2013/05/04 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
2017/03/04 PHP
PHP中的浅复制与深复制的实例详解
2017/10/26 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
FireFox与IE 下js兼容触发click事件的代码
2008/11/20 Javascript
jquery获取下拉列表的值为null的解决方法
2011/03/18 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
2013/10/11 Javascript
在javascript中执行任意html代码的方法示例解读
2013/12/25 Javascript
node.js中的fs.createReadStream方法使用说明
2014/12/17 Javascript
js打造数组转json函数
2015/01/14 Javascript
JavaScript学习笔记整理之引用类型
2016/01/22 Javascript
jQuery Easyui Tabs扩展根据自定义属性打开页签
2016/08/15 Javascript
深入理解react-router@4.0 使用和源码解析
2017/05/23 Javascript
在nginx上部署vue项目(history模式)的方法
2017/12/28 Javascript
详解微信小程序-canvas绘制文字实现自动换行
2019/04/26 Javascript
vue路由传参三种基本方式详解
2019/12/09 Javascript
微信小程序背景音乐开发详解
2019/12/12 Javascript
design vue 表格开启列排序的操作
2020/10/28 Javascript
[01:06:30]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第二场 1月9日
2021/03/11 DOTA
处理Python中的URLError异常的方法
2015/04/30 Python
django将数组传递给前台模板的方法
2019/08/06 Python
Python爬虫实现使用beautifulSoup4爬取名言网功能案例
2019/09/15 Python
python实现一个简单RPC框架的示例
2020/10/28 Python
在Python中字典按值排序的实现方法
2020/11/12 Python
CSS3圆角边框和边界图片效果实例
2016/07/01 HTML / CSS
野兽派官方旗舰店:THE BEAST 野兽派
2016/08/05 全球购物
桥梁与隧道工程专业本科生求职信
2013/10/08 职场文书
中专毕业生自我鉴定
2013/11/21 职场文书
领导的自我鉴定
2013/12/28 职场文书
新春联欢会主持词
2014/03/24 职场文书
正科级干部考察材料
2014/05/29 职场文书
党的群众路线教育实践活动对照检查材料(四风)
2014/09/27 职场文书
教师教育教学随笔
2015/08/15 职场文书
国际最新研究在陨石中发现DNA主要成分 或由陨石带来地球
2022/04/29 数码科技
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技