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连mysql和oracle数据库性能比较
Oct 09 PHP
聊天室php&mysql(一)
Oct 09 PHP
PHP 日期加减的类,很不错
Oct 10 PHP
php实现的返回数据格式化类实例
Sep 22 PHP
php批量删除cookie的简单实现方法
Jan 26 PHP
php简单截取字符串代码示例
Oct 19 PHP
PHP实现图的邻接矩阵表示及几种简单遍历算法分析
Nov 24 PHP
redis+php实现微博(二)发布与关注功能详解
Sep 23 PHP
Windows服务器中PHP如何安装redis扩展
Sep 27 PHP
php实现映射操作实例详解
Oct 02 PHP
php变量与字符串的增删改查操作示例
May 07 PHP
PHP中isset、empty的用法与区别示例详解
Nov 05 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
OAuth认证协议中的HMACSHA1加密算法(实例)
2017/10/25 PHP
thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例
2019/05/29 PHP
在修改准备发的批量美化select+可修改select时,在非IE下发现了几个问题
2007/01/09 Javascript
javascript中的关于类型转换的性能优化
2010/12/14 Javascript
判断用户是否在线的代码
2011/03/05 Javascript
jquery mobile changepage的三种传参方法介绍
2013/09/13 Javascript
js与jquery获取父级元素,子级元素,兄弟元素的实现方法
2014/01/09 Javascript
JS控制一个DIV层在指定时间内消失的方法
2014/02/17 Javascript
浅析JS中document对象的一些重要属性
2014/03/06 Javascript
判断字符串的长度(优化版)中文占两个字符
2014/10/30 Javascript
Node.js编写爬虫的基本思路及抓取百度图片的实例分享
2016/03/12 Javascript
javascript 数据存储的常用函数总结
2017/06/01 Javascript
javaScript封装的各种写法
2017/08/14 Javascript
Angular实现的敏感文字自动过滤与提示功能示例
2017/12/29 Javascript
js删除数组中的元素delete和splice的区别详解
2018/02/03 Javascript
JavaScript中将值转换为字符串的五种方法总结
2019/06/06 Javascript
微信小程序中的上拉、下拉菜单功能
2020/03/13 Javascript
[00:55]深扒TI7聊天轮盘语音出处3
2017/05/11 DOTA
Python Web框架Flask中使用百度云存储BCS实例
2015/02/08 Python
详解Python3.1版本带来的核心变化
2015/04/07 Python
Python爬虫实现(伪)球迷速成
2018/06/10 Python
Python中list查询及所需时间计算操作示例
2018/06/21 Python
Python基于OpenCV库Adaboost实现人脸识别功能详解
2018/08/25 Python
Python 占位符的使用方法详解
2019/07/10 Python
python 判断三个数字中的最大值实例代码
2019/07/24 Python
python list多级排序知识点总结
2019/10/23 Python
tensorflow使用指定gpu的方法
2020/02/04 Python
python 发送邮件的四种方法汇总
2020/12/02 Python
Bose法国官网:购买耳机、扬声器、家庭影院、专业音响
2017/12/21 全球购物
俄罗斯最大的在线珠宝大卖场:Nebo
2019/12/08 全球购物
三星加拿大官方网上商店:Samsung CA
2020/12/18 全球购物
全球采购的街头服饰和帽子:Urban Excess
2020/10/28 全球购物
劳动仲裁撤诉申请书
2015/05/18 职场文书
让生命充满爱观后感
2015/06/08 职场文书
个人工作失误的保证书怎么写?
2019/06/21 职场文书
python实现三阶魔方还原的示例代码
2021/04/28 Python