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中的 == 运算符进行字符串比较
Nov 26 PHP
小文件php+SQLite存储方案
Sep 04 PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
Apr 23 PHP
CURL的学习和应用(附多线程实现)
Jun 03 PHP
laravel 4安装及入门图文教程
Oct 29 PHP
php将字符串随机分割成不同长度数组的方法
Jun 01 PHP
CI框架简单邮件发送类实例
May 18 PHP
php基于openssl的rsa加密解密示例
Jul 11 PHP
PHP会话控制实例分析
Dec 24 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
Nov 16 PHP
PHP实现创建一个RPC服务操作示例
Feb 23 PHP
PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
Apr 16 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绘制饼状图的实现代码
2013/06/07 PHP
php使用多个进程同时控制文件读写示例
2014/02/28 PHP
php检测url是否存在的方法
2015/04/14 PHP
PHP图形操作之Jpgraph学习笔记
2015/12/25 PHP
Ajax清除浏览器js、css、图片缓存的方法
2015/08/06 Javascript
js实现文本框宽度自适应文本宽度的方法
2015/08/13 Javascript
jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表
2015/08/26 Javascript
JS+CSS实现电子商务网站导航模板效果代码
2015/09/10 Javascript
Node.js项目中调用JavaScript的EJS模板库的方法
2016/03/11 Javascript
Bootstrap3.0学习教程之JS折叠插件
2016/05/27 Javascript
JS简单生成两个数字之间随机数的方法
2016/08/03 Javascript
NodeJs入门教程之定时器和队列
2019/03/08 NodeJs
一文快速了解JQuery中的AJAX
2019/05/31 jQuery
[37:37]DAC2018 4.4 淘汰赛 Optic vs Mineski 第二场
2018/04/05 DOTA
Python中获取网页状态码的两个方法
2014/11/03 Python
Python编程之微信推送模板消息功能示例
2017/08/21 Python
Python3使用PyQt5制作简单的画板/手写板实例
2017/10/19 Python
使用Python+Splinter自动刷新抢12306火车票
2018/01/03 Python
Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)
2019/07/16 Python
pytorch点乘与叉乘示例讲解
2019/12/27 Python
python 实现从高分辨图像上抠取图像块
2020/01/02 Python
使用Python实现批量ping操作方法
2020/05/06 Python
html5中audio支持音频格式的解决方法
2018/08/24 HTML / CSS
罗马尼亚购物网站:Vivantis.ro
2019/07/20 全球购物
大学生专业个人学习的自我评价
2013/10/26 职场文书
毕业生大学生活自我总结
2014/01/31 职场文书
记帐员岗位责任制
2014/02/08 职场文书
学习演讲稿范文
2014/05/10 职场文书
建筑工地宣传标语
2014/06/18 职场文书
税务职业生涯规划书范文
2014/09/16 职场文书
2014年保险公司工作总结
2014/11/22 职场文书
业务员岗位职责
2015/02/03 职场文书
2015年学生会干事工作总结
2015/04/09 职场文书
茶花女读书笔记
2015/06/29 职场文书
青年干部培训班学习心得体会
2016/01/06 职场文书
Python创建SQL数据库流程逐步讲解
2022/09/23 Python