<?php
 /**
  * Created by PhpStorm.
  * User: hanks
  * Date: 6/2/2017
  * Time: 6:03 PM
  */
 /*
 【数字签名】
 使用完全加密的数据进行传输的好处是更加安全,但是计算更加复杂,需要传输的数据也更多,
 更常用的方式只是对要传输的数据做一个数字签名,在接收端对接收到的数据进行一个签名运算,
 只要客户端计算的签名和接受的的签名一样就可以认为收到的数据没有被篡改过。

 计算签名使用openssl提供的openssl_sign(),签名验证使用openssl_verify()
 这两个函数的函数签名为:

 bool openssl_sign ( string $data , string &$signature , mixed $priv_key_id [, mixed $signature_alg = OPENSSL_ALGO_SHA1 ] )
 int openssl_verify ( string $data , string $signature , mixed $pub_key_id [, mixed $signature_alg = OPENSSL_ALGO_SHA1 ] )
 通过参数比较容易理解函数的使用,sign函数第一个函数是一个字符串,所以对数组,
 对象等签名需要使用json_encode或者base64_encode等函数编码一下;
 第二个参数是&$signature就是函数会把对数据$data的签名保存在$signature变量。

 注意返回值,第一个函数是bool值,第二个是int,1表示签名验证通过, 0表示签名不正确,-1表示发生错误。*/

 $publicKey = file_get_contents('./php-public.key');
 $privateKey = file_get_contents('./php-private.key');

 $data = [
     'orderId' => 100002,
     'pay_time' => '2015-09-02 10:10:10',
     'extra'=>'额外的数据'
 ];
 $signature = '';
 openssl_sign(json_encode($data), $signature, $privateKey);
 echo 'sign is: ' . base64_encode($signature);

 //这里做实验,手动的篡改下orderId的键值
 //$data = [
 //    'orderId' => 100003,
 //    'pay_time' => '2015-09-02 10:10:10',
 //    'extra'=>'额外的数据'
 //];

 $verify = openssl_verify(json_encode($data), $signature, $publicKey);

 echo "\nverify result: $verify";//返回的将是0,即签名不正确,返回1,表示签名验证通过

php使用openssl进行数字签名验证的更多相关文章

  1. 【PE结构】恶意代码数字签名验证

    说明 恶意代码数字签名验证功能,WinverityTrust.CryptQueryObject 代码实现 WinVerifyTrust //------------------------------ ...

  2. 使用OpenSSL做RSA签名验证 支付宝移动快捷支付 的server异步通知

    因为业务须要.我们须要使用支付宝移动快捷支付做收款.支付宝给了我们<移动快捷支付应用集成接入包支付接口>见支付宝包<WS_SECURE_PAY_SDK>. 支付宝给的serve ...

  3. openssl 摘要和签名验证指令dgst使用详解

    1.信息摘要和数字签名概述 信息摘要:对数据进行处理,得到一段固定长度的结果,其特点输入: 1.输出长度固定.即输出长度和输入长度无关. 2.不可逆.即由输出数据理论上不能推导出输入数据 4.对输入数 ...

  4. [加密]openssl之数字证书签名,CA认证原理及详细操作

    转自:http://blog.sina.com.cn/s/blog_cfee55a70102wn3h.html 1 公钥密码体系(Public-key Cryptography) 公钥密码体系,又称非 ...

  5. delphi数字签名验证及能够获取数字签名文件信息(利用wintrust.dll的导出函数,翻译一下)

    unit TrustCheck; interface uses Windows,SysUtils,jwaWinTrust,JwaWinCrypt; function CheckFileTrust(co ...

  6. 用Keytool和OpenSSL生成和签发数字证书

    一)keytool生成私钥文件(.key)和签名请求文件(.csr),openssl签发数字证书      J2SDK在目录%JAVA_HOME%/bin提供了密钥库管理工具Keytool,用于管理密 ...

  7. openssl req(生成证书请求和自建CA)

    伪命令req大致有3个功能:生成证书请求文件.验证证书请求文件和创建根CA.由于openssl req命令选项较多,所以先各举几个例子,再集中给出openssl req的选项说明.若已熟悉openss ...

  8. openssl req(生成证书请求和自建CA)(转)

    openssl req(生成证书请求和自建CA)     伪命令req大致有3个功能:生成证书请求文件.验证证书请求文件和创建根CA.由于openssl req命令选项较多,所以先各举几个例子,再集中 ...

  9. ios专题 - openSSL

    1  概述 1.1  产生背景 基 于万维网的电子商务和网上银行等新兴应用,极大地方便了人们的日常生活,受到人们的青睐.由于这些应用都需要在网络上进行在线交易,它们对网络通信的安全 性提出了更高的要求 ...

随机推荐

  1. windows下安装mongodb以及node.js连接mongodb

    一.MongoDB 下载 下载地址  https://www.mongodb.com/download-center#community  选择windows版下载,然后安装. 二.安装完毕后创建数据 ...

  2. JS判断PC和移动端设备

    1.方法一 function IsPC() { var userAgentInfo = navigator.userAgent; var Agents = ["Android", ...

  3. MyBatis和Hibernate相比,优势在哪里?

    1.开发对比开发速度 hibernate的真正掌握要比Mybatis来得难些.Mybatis框架相对简单很容易上手,但也相对简陋些.个人觉得要用好Mybatis还是首先要先理解好Hibernate. ...

  4. SparkMLlib学习分类算法之逻辑回归算法

    SparkMLlib学习分类算法之逻辑回归算法 (一),逻辑回归算法的概念(参考网址:http://blog.csdn.net/sinat_33761963/article/details/51693 ...

  5. Visual Studio2017中如何让Entity Framework工具【ADO.NET实体数据模型】支持MYSQL数据源

    熟悉Entity Framework应该对以下图片不陌生,他就是ADO.NET实体数据模型向导:可以将数据库的表自动生成模型类,或者创建Code First的模型文件. 但是这个模型向导默认只显示微软 ...

  6. 自定义控件pickView

    package com.example.healthembed.util; import java.util.ArrayList; import java.util.List; import java ...

  7. qt添加资源文件方法

    File->new file->file and classes->Qt->qt resources->   add name   add->add prefix- ...

  8. Java生成二维码--QRGen

    最近公司需求需要生成一个二维码 , 由于之前没有接触过 , 故此做个记录 . 在网上找到了不少二维码生成工具,都蛮好用的. 不过要集成二维码生成功能到应用开发中,就要选择最好用成熟的库了,最终决定采用 ...

  9. 1.搭建Maven 多模块应用 --Intellij IDEA 2016.3.5

    1.打开IDEA,file->new ->project  新建工程 2.建成的项目如下图,然后新建java class 模块: 右击工程名->new -> Module 3. ...

  10. 偏最小二乘回归分析建模步骤的R实现(康复俱乐部20名成员测试数据)+补充pls回归系数矩阵的算法实现

    kf=read.csv('d:/kf.csv') # 读取康复数据kfsl=as.matrix(kf[,1:3]) #生成生理指标矩阵xl=as.matrix(kf[,4:6]) #生成训练指标矩阵x ...