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的单引号和双引号 字符串效率
May 27 PHP
php skymvc 一款轻量、简单的php
Jun 28 PHP
Zend Studio 实用快捷键一览表(精心整理)
Aug 10 PHP
PHP保留两位小数并且四舍五入及不四舍五入的方法
Sep 22 PHP
php集成环境xampp中apache无法启动问题解决方案
Nov 18 PHP
php实现的mongodb操作类实例
Apr 03 PHP
php实现的xml操作类
Jan 15 PHP
详解PHP防止盗链防止迅雷下载的方法
Apr 26 PHP
php中请求url的五种方法总结
Jul 13 PHP
Laravel 中创建 Zip 压缩文件并提供下载的实现方法
Apr 02 PHP
浅谈PHP5.6 与 PHP7.0 区别
Oct 09 PHP
PHP获取当前时间不准确问题解决方案
Aug 14 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
ThinkPHP学习笔记(一)ThinkPHP部署
2014/06/22 PHP
PHP session会话操作技巧小结
2016/09/27 PHP
PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
2016/11/05 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
用js获取电脑信息(是使用与IE浏览器)
2013/01/15 Javascript
jquery使用jquery.zclip插件复制对象的实例教程
2013/12/04 Javascript
JS在IE下缺少标识符的错误
2014/07/23 Javascript
jQuery实现按钮的点击 全选/反选 单选框/复选框 文本框 表单验证
2015/06/25 Javascript
js实现简单的联动菜单效果
2015/08/19 Javascript
Bootstrap学习笔记之css样式设计(2)
2016/06/07 Javascript
javascript兼容性(实例讲解)
2017/08/15 Javascript
详解Vue结合后台的列表增删改案例
2018/08/21 Javascript
vuex提交state&&实时监听state数据的改变方法
2018/09/16 Javascript
利用原生的JavaScript实现简单拼图游戏
2018/11/18 Javascript
通过npm或yarn自动生成vue组件的方法示例
2019/02/12 Javascript
egg.js的基本使用和调用数据库的方法示例
2019/05/18 Javascript
[51:17]Mski vs VGJ.S Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
python使用正则搜索字符串或文件中的浮点数代码实例
2014/07/11 Python
Python验证文件是否可读写代码分享
2017/12/11 Python
python3 selenium自动化测试 强大的CSS定位方法
2019/08/23 Python
python 消费 kafka 数据教程
2019/12/21 Python
关于css中margin的值和垂直外边距重叠问题
2020/10/27 HTML / CSS
美国知名的百货清仓店:Neiman Marcus Last Call
2016/08/03 全球购物
高档奢华时装在线目的地:FORWARD by elyse walker
2017/10/16 全球购物
大学生就业推荐信范文
2013/11/29 职场文书
黄继光的英雄事迹材料
2014/02/13 职场文书
职工擅自离岗检讨书
2014/09/23 职场文书
团代会开幕词
2015/01/28 职场文书
大学生简历自我评价2015
2015/03/03 职场文书
2015年乡镇卫生院妇幼保健工作总结
2015/05/19 职场文书
python将图片转为矢量图的方法步骤
2021/03/30 Python
Golang 实现获取当前函数名称和文件行号等操作
2021/05/08 Golang
浅谈Python响应式类库RxPy
2021/06/14 Python
Redis读写分离搭建的完整步骤
2021/09/14 Redis
关于nginx 实现jira反向代理的问题
2021/09/25 Servers