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连接Oracle for NT 远程数据库
Oct 09 PHP
linux系统下php安装mbstring扩展的二种方法
Jan 20 PHP
php对数组排序代码分享
Feb 24 PHP
php 过滤英文标点符号及过滤中文标点符号代码
Jun 12 PHP
ThinkPHP中的常用查询语言汇总
Aug 22 PHP
php使用str_replace实现输入框回车替换br的方法
Nov 24 PHP
PHP中if和or运行效率对比
Dec 12 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
Apr 15 PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
Dec 15 PHP
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
Feb 07 PHP
PHP 网站修改默认访问文件的nginx配置
May 27 PHP
PHP删除字符串中非字母数字字符方法总结
Jan 20 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
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
php中根据变量的类型 选择echo或dump
2012/07/05 PHP
6个超实用的PHP代码片段
2015/08/10 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
2015/12/21 PHP
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
PHP容器类的两种实现方式示例
2019/07/24 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
2019/09/18 PHP
THINKPHP5分页数据对象处理过程解析
2020/10/28 PHP
jquery动画1.加载指示器
2012/08/24 Javascript
登陆成功后自动计算秒数执行跳转
2014/01/23 Javascript
js实现从数组里随机获取元素
2015/01/12 Javascript
vue省市区三联动下拉选择组件的实现
2017/04/28 Javascript
jquery实现简单实用的轮播器
2017/05/23 jQuery
vue深入解析之render function code详解
2017/07/18 Javascript
Vuex中mutations与actions的区别详解
2018/03/01 Javascript
js动态引入的四种方法
2018/05/05 Javascript
vue底部加载更多的实例代码
2018/06/29 Javascript
监听angularJs列表数据是否渲染完毕的方法示例
2018/11/07 Javascript
如何实现双向绑定mvvm的原理实现
2019/05/28 Javascript
小程序组件之自定义顶部导航实例
2019/06/12 Javascript
layui实现三级导航菜单
2019/07/26 Javascript
vue.js实现数据库的JSON数据输出渲染到html页面功能示例
2019/08/03 Javascript
浅析VUE防抖与节流
2020/11/24 Vue.js
[58:23]LGD vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python字符串格式化
2015/06/15 Python
关于python中密码加盐的学习体会小结
2019/07/15 Python
Django Form 实时从数据库中获取数据的操作方法
2019/07/25 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
2019/08/07 Python
Python进程Multiprocessing模块原理解析
2020/02/28 Python
django template实现定义临时变量,自定义赋值、自增实例
2020/07/12 Python
CSS3实现可关闭的下拉手风琴菜单效果
2015/08/31 HTML / CSS
党员对照检查材料
2014/09/22 职场文书
故意伤害人身损害赔偿协议书
2014/11/19 职场文书
秦始皇兵马俑导游词
2015/02/02 职场文书
日本动漫十大公认神作:第五现已全网禁播,《死亡笔记》在榜
2022/03/18 日漫
Alexa停服!网站排名将何去何从?目前还没有替代品。
2022/04/15 杂记