php 生成签名及验证签名详解


Posted in PHP onOctober 26, 2016

php 生成签名及验证签名

<?php
  /**
   * 根据原文生成签名内容
   *
   * @param string $data 原文内容
   *
   * @return string
   * @author confu
   */
  function sign($data)
  {
    $filePath = 'test.p12';
    if(!file_exists($filePath)) {
      return false;
    }
 
    $pkcs12 = file_get_contents($filePath);
    if (openssl_pkcs12_read($pkcs12, $certs, '读取证书所需要的密码')) {
      $privateKey = $certs['pkey']; //根据实际情况键值可能不同
      $publicKey = $certs['cert']; //根据实际情况键值可能不同
      $binary_signature = "";
      if (openssl_sign($data, $binarySignature, $privateKey, OPENSSL_ALGO_SHA1)) {
        return $binarySignature;
      } else {
        return '';
      }
    } else {
      return '';
    }
  }
 
  /**
   * 验证签名自己生成的是否正确
   *
   * @param string $data 签名的原文
   * @param string $signature 签名
   *
   * @return bool
   * @author confu
   */
  function verifySign($data, $signature)
  {
    $filePath = 'test.p12';
    if(!file_exists($filePath)) {
      return false;
    }
 
    $pkcs12 = file_get_contents($filePath);
    if (openssl_pkcs12_read($pkcs12, $certs, '读取证书所需要的密码')) {
      $publicKey = $certs['cert'];
      $ok = openssl_verify($data, $signature, $publicKey);
      if ($ok == 1) {
        return true;
      }
    }
    return false;
  }
 
  /**
   * 验证返回的签名是否正确
   *
   * @param string $data 要验证的签名原文
   * @param string $signature 签名内容
   *
   * @return bool
   * @author confu
   */
  function verifyRespondSign($data, $signature)
  {
    $filePath = 'allinpay-pds.pem';
    if(!file_exists($filePath)) {
      return false;
    }
 
    $fp = fopen($filePath, "r");
    $cert = fread($fp, 8192);
    fclose($fp);
    $pubkeyid = openssl_get_publickey($cert);
 
    if(!is_resource($pubkeyid)) {
      return false;
    }
 
    $ok = openssl_verify($data, $signature, $pubkeyid);
    if ($ok == 1) {
      openssl_free_key($pubkeyid);
      return true;
    }
    return false;
  }
?>

 openssl_sign 默认signature_alg参数是OPENSSL_ALGO_SHA1

如果使用DSA加密方式需要使用OPENSSL_ALGO_DSS1参数

signature_alg 其他参数

OPENSSL_ALGO_DSS1 (integer)

OPENSSL_ALGO_SHA1 (integer)

OPENSSL_ALGO_SHA224 (integer)

OPENSSL_ALGO_SHA256 (integer)

OPENSSL_ALGO_SHA384 (integer)

OPENSSL_ALGO_SHA512 (integer)

OPENSSL_ALGO_RMD160 (integer)

OPENSSL_ALGO_MD5 (integer)

OPENSSL_ALGO_MD4 (integer)

OPENSSL_ALGO_MD2 (integer)

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

PHP 相关文章推荐
十天学会php(3)
Oct 09 PHP
PHP实时显示输出
Oct 02 PHP
PHP 批量删除 sql语句
Jun 05 PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
Jun 13 PHP
zf框架的数据库追踪器使用示例
Mar 13 PHP
php常用的安全过滤函数集锦
Oct 09 PHP
使用PHP生成PDF方法详解
Jan 23 PHP
PHP请求Socket接口测试实例
Aug 12 PHP
php防止sql注入的方法详解
Feb 20 PHP
php往mysql中批量插入数据实例教程
Dec 12 PHP
PHP实现通过文本文件统计页面访问量功能示例
Feb 13 PHP
解决php写入数据库乱码的问题
Sep 17 PHP
PHP XML和数组互相转换详解
Oct 26 #PHP
PHP对XML内容进行修改和删除实例代码
Oct 26 #PHP
php array_merge_recursive 数组合并
Oct 26 #PHP
php抛出异常与捕捉特定类型的异常详解
Oct 26 #PHP
php array_map使用自定义的函数处理数组中的每个值
Oct 26 #PHP
AES加解密在php接口请求过程中的应用示例
Oct 26 #PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
Oct 25 #PHP
You might like
一个js实现的所谓的滑动门
2007/05/23 Javascript
js 键盘记录实现(兼容FireFox和IE)
2010/02/07 Javascript
浏览器加载、渲染和解析过程黑箱简析
2012/11/29 Javascript
EditPlus注册码生成器(js代码实现)
2013/03/25 Javascript
jQuery写的日历(包括日历的样式及功能)
2013/04/23 Javascript
jQuery.fn和jQuery.prototype区别介绍
2013/10/05 Javascript
jquery delay()介绍及使用指南
2014/09/02 Javascript
手动初始化Angular的模块与控制器
2016/12/26 Javascript
使用bat打开多个cmd窗口执行gulp、node
2017/02/17 Javascript
深入理解nodejs中Express的中间件
2017/05/19 NodeJs
详解express与koa中间件模式对比
2017/08/07 Javascript
浅谈Vue.nextTick 的实现方法
2017/10/25 Javascript
vue2.0基于vue-cli+element-ui制作树形treeTable
2019/04/30 Javascript
jquery实现动态创建form并提交的方法示例
2019/05/27 jQuery
node.js使用fs读取文件出错的解决方案
2019/10/23 Javascript
python进阶教程之文本文件的读取和写入
2014/08/29 Python
Python的Tornado框架的异步任务与AsyncHTTPClient
2016/06/27 Python
python skimage 连通性区域检测方法
2018/06/21 Python
Python使用matplotlib绘制随机漫步图
2018/08/27 Python
pycharm编写spark程序,导入pyspark包的3中实现方法
2019/08/02 Python
tensorflow 模型权重导出实例
2020/01/24 Python
利用python生成照片墙的示例代码
2020/04/09 Python
html5 touch事件实现页面上下滑动效果【附代码】
2016/03/10 HTML / CSS
美国校园市场:OCM
2017/06/08 全球购物
Hotels.com越南:酒店预订
2019/10/29 全球购物
客房主管岗位职责
2013/12/09 职场文书
毕业生自荐书
2014/02/03 职场文书
学习型班组申报材料
2014/05/31 职场文书
民主评议政风行风整改方案
2014/09/17 职场文书
档案工作个人总结
2015/03/03 职场文书
个性与发展自我评价
2015/03/06 职场文书
2015年小学教师培训工作总结
2015/07/21 职场文书
护士医德医风心得体会
2016/01/25 职场文书
人民币符号
2022/02/17 杂记
斗罗大陆八大特殊魂兽,龙族始祖排榜首,第五最残忍(翠魔鸟)
2022/03/18 国漫
css3 选择器
2022/05/11 HTML / CSS