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程序61条面向对象分析设计的经验小结
Nov 12 PHP
discuz authcode 经典php加密解密函数解析
Jul 12 PHP
PHP高级对象构建 工厂模式的使用
Feb 05 PHP
php遍历所有文件及文件夹的方法深入解析
Jun 08 PHP
php中使用session防止用户非法登录后台的方法
Jan 27 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
Apr 21 PHP
php计划任务之验证是否有多个进程调用同一个job的方法
Dec 07 PHP
Yii2框架BootStrap样式的深入理解
Nov 07 PHP
PHP中in_array的隐式转换的解决方法
Mar 06 PHP
PHP检查端口是否可以被绑定的方法示例
Aug 09 PHP
PDO::exec讲解
Jan 28 PHP
PHP中遍历数组的三种常用方法实例分析
Jun 24 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 ss7.5的数据调用 (笔记)
2010/03/08 PHP
PHP数据库操作之基于Mysqli的数据库操作类库
2014/04/19 PHP
利用PHP将图片转换成base64编码的实现方法
2016/09/13 PHP
PHP实现的策略模式简单示例
2017/08/25 PHP
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
JavaScript DOM学习第八章 表单错误提示
2010/02/19 Javascript
Javascript 赋值机制详解
2014/11/23 Javascript
jQuery中:only-child选择器用法实例
2015/01/03 Javascript
简述JavaScript中正则表达式的使用方法
2015/06/15 Javascript
JavaScript的面向对象编程基础
2015/08/13 Javascript
最原始的jQuery注册验证方式
2016/10/11 Javascript
js实现简易聊天对话框
2017/08/17 Javascript
用vue构建多页面应用的示例代码
2017/09/20 Javascript
NodeJS爬虫实例之糗事百科
2017/12/14 NodeJs
小程序数据通信方法大全(推荐)
2019/04/15 Javascript
基于JS实现table导出Excel并保留样式
2020/05/19 Javascript
vue点击Dashboard不同内容 跳转到同一表格的实例
2020/11/13 Javascript
pycharm 使用心得(七)一些实用功能介绍
2014/06/06 Python
python引用DLL文件的方法
2015/05/11 Python
Python进阶-函数默认参数(详解)
2017/05/18 Python
python线程池threadpool使用篇
2018/04/27 Python
python实现Flappy Bird源码
2018/12/24 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
2019/07/10 Python
Python解压 rar、zip、tar文件的方法
2019/11/19 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
浅谈keras中Dropout在预测过程中是否仍要起作用
2020/07/09 Python
带你学习Python如何实现回归树模型
2020/07/16 Python
python爬虫线程池案例详解(梨视频短视频爬取)
2021/02/20 Python
大学生找工作推荐信范文
2013/11/28 职场文书
直接有效的自我评价
2014/01/11 职场文书
法人代表委托书
2014/04/04 职场文书
大型活动组织方案
2014/05/10 职场文书
给老婆的检讨书1000字
2015/01/01 职场文书
辛亥革命观后感
2015/06/02 职场文书
2015年行政管理人员工作总结
2015/10/15 职场文书
动视暴雪取消疫苗禁令 让所有员工返回线下工作
2022/04/03 其他游戏