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
PHP图片上传类带图片显示
Nov 25 PHP
PHP设计模式 注册表模式
Feb 05 PHP
php比较多维数组中值的大小排序实现代码
Sep 08 PHP
深入php define()函数以及defined()函数的用法详解
Jun 05 PHP
php实现文件编码批量转换
Mar 10 PHP
5款适合PHP使用的HTML编辑器推荐
Jul 03 PHP
php生成静态html页面的方法(2种方法)
Sep 14 PHP
PHP实现带重试功能的curl连接示例
Jul 28 PHP
PHP页面输出搜索后跳转下一页的处理方法
Sep 30 PHP
PHP网页安全认证的实例详解
Sep 28 PHP
PHP示例演示发送邮件给某个邮箱
Apr 03 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 ftp文件上传函数(基础版)
2010/06/03 PHP
php_pdo 预处理语句详解
2016/11/21 PHP
Eval and new funciton not the same thing
2012/12/27 Javascript
一个级联菜单代码学习及removeClass与addClass的应用
2013/01/24 Javascript
JavaScript对象的property属性详解
2014/04/01 Javascript
js动态切换图片的方法
2015/01/20 Javascript
jQuery对象初始化的传参方式
2015/02/26 Javascript
JS版微信6.0分享接口用法分析
2016/10/13 Javascript
react实现pure render时bind(this)隐患需注意!
2017/03/09 Javascript
vue打包后显示空白正确处理方法
2017/11/01 Javascript
改变vue请求过来的数据中的某一项值的方法(详解)
2018/03/08 Javascript
微信小程序bindtap事件与冒泡阻止详解
2019/08/08 Javascript
ElementUI Tree 树形控件的使用并给节点添加图标
2020/02/27 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛 DT VS HGT
2014/05/22 DOTA
[01:14]DOTA2 7.22版本新增神杖效果展示(智力英雄篇)
2019/05/29 DOTA
[01:16:37]【全国守擂赛】第三周决赛 Dark Knight vs. 一个弱队
2020/05/04 DOTA
Python随机数random模块使用指南
2016/09/09 Python
Python的iOS自动化打包实例代码
2018/11/22 Python
Python实现定时自动关闭的tkinter窗口方法
2019/02/16 Python
face++与python实现人脸识别签到(考勤)功能
2019/08/28 Python
使用Bazel编译TensorBoard教程
2020/02/15 Python
Django单元测试中Fixtures用法详解
2020/02/25 Python
一篇文章搞懂python的转义字符及用法
2020/09/03 Python
总结Pyinstaller的坑及终极解决方法(小结)
2020/09/21 Python
Skyscanner波兰:廉价航班
2017/11/07 全球购物
YSL圣罗兰美妆英国官网:Yves Saint Laurent Beauty UK
2019/08/03 全球购物
爷爷追悼会答谢词
2014/01/24 职场文书
幼儿园亲子活动方案
2014/01/29 职场文书
电大毕业自我鉴定
2014/02/03 职场文书
小学生环保倡议书
2014/05/15 职场文书
杭白菊导游词
2015/02/10 职场文书
干部培训工作总结2015
2015/05/25 职场文书
老人与海读书笔记
2015/06/26 职场文书
Python中异常处理用法
2021/11/27 Python
Python Matplotlib绘制动画的代码详解
2022/05/30 Python
windows系统安装配置nginx环境
2022/06/28 Servers