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笔记之:有规律大文件的读取与写入的分析
Apr 26 PHP
ThinkPHP整合百度Ueditor图文教程
Oct 21 PHP
PHP读取txt文本文件并分页显示的方法
Mar 11 PHP
PHP Web木马扫描器代码分享
Sep 06 PHP
PHP检测用户是否关闭浏览器的方法
Feb 14 PHP
PHP根据session与cookie用户登录状态操作类的代码
May 13 PHP
PHP引用返回用法示例
May 28 PHP
微信公众号开发之语音消息识别php代码
Aug 08 PHP
PHP生成图片验证码功能示例
Jan 12 PHP
php+ajax实现商品对比功能示例
Apr 13 PHP
laravel 解决Eloquent ORM的save方法无法插入数据的问题
Oct 21 PHP
PHP 实现链式操作
Mar 09 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 Undefined index和Undefined variable的解决方法
2008/03/27 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
2016/07/01 PHP
strpos() 函数判断字符串中是否包含某字符串的方法
2019/01/16 PHP
基于ThinkPHP删除目录及目录文件函数
2020/10/28 PHP
asp 的 分词实现代码
2007/05/24 Javascript
javascript 检测浏览器类型和版本的代码
2009/09/15 Javascript
js截取固定长度的中英文字符的简单实例
2013/11/22 Javascript
laytpl 精致巧妙的JavaScript模板引擎
2014/08/29 Javascript
轻量级网页遮罩层jQuery插件用法实例
2015/07/31 Javascript
JavaScript利用正则表达式替换字符串中的内容
2016/12/12 Javascript
js实现符合国情的日期插件详解
2017/01/19 Javascript
快速实现jQuery多级菜单效果
2017/02/01 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
2018/05/16 Javascript
详解JavaScript对数组操作(添加/删除/截取/排序/倒序)
2019/04/28 Javascript
AngularJS实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 Javascript
JS实现动态添加外部js、css到head标签的方法
2019/06/05 Javascript
vue 使用微信jssdk,调用微信相册上传图片功能
2020/11/13 Javascript
[46:58]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第一场 12.17
2020/12/19 DOTA
Python代理抓取并验证使用多线程实现
2013/05/03 Python
python实现查询IP地址所在地
2015/03/29 Python
Python标准库shutil用法实例详解
2018/08/13 Python
详解Python3序列赋值、序列解包
2019/05/14 Python
Python OpenCV实现视频分帧
2019/06/01 Python
pip安装python库的方法总结
2019/08/02 Python
给大家整理了19个pythonic的编程习惯(小结)
2019/09/25 Python
Python3搭建http服务器的实现代码
2020/02/11 Python
解决pycharm同一目录下无法import其他文件
2020/02/12 Python
全球知名的珠宝首饰品牌:Kay Jewelers
2018/02/11 全球购物
世界上最大的高分辨率在线图片库:Alamy
2018/07/07 全球购物
优衣库台湾官网:UNIQLO台湾
2019/02/01 全球购物
应届生护士求职信
2013/11/01 职场文书
中学生励志演讲稿
2014/04/26 职场文书
战略合作意向书
2014/07/29 职场文书
迎七一演讲稿
2014/09/12 职场文书
介绍信模板
2015/01/31 职场文书
浅谈Golang 嵌套 interface 的赋值问题
2021/04/29 Golang