因为PHP无法读取.pfx文件,所以可以先转换为.pem文件然后在读取里面的数据,可以读取.cer文件,为了两方面统一,就都换成.pem然后再进行加签和验签。

sign.php

 <?php

 define("filePath","D:\\digitalCertificate\\");//.pfx和.cer文件放置的地址
define("pfxFileName","jsc.pfx");//.pfx文件名
define("password","abc123");//.pfx文件的密码 /*实现.pfx文件转为.pem文件*/
$file = filePath.pfxFileName;
$results = array();
$worked = openssl_pkcs12_read(file_get_contents($file), $results, password);
$certificateCApem =$file.'.pem';
@file_put_contents($certificateCApem, $results); /*实现对传来的数据进行排序*/
function dataSort($data) {
$dataArr=explode(";",$data);
sort($dataArr);
$dataStr=implode(',',$dataArr);
$TransData=str_replace(",","&",$dataStr);
return $TransData;
} /*实现加签功能*/
function sign($data) {
$priKey = file_get_contents(filePath.pfxFileName.'.pem');
$res = openssl_get_privatekey($priKey);
openssl_sign($data, $sign, $res);
openssl_free_key($res);
$sign = base64_encode($sign);
return $sign;
} $data="";//用户传进的要加签的数据,中间每个参数用';'分隔开
// $data="name=amdin;code=12313;pass=admin;email=admin@qq.com;id=25536"; //测试用的$data数据 $dataReturn=dataSort($data).'&'.'signType="RSA"'.'&'.'sign='.sign(dataSort($data));//业务需求需要返回的数据格式,使用者可根据实际需要改变
print_r($dataReturn);//生成加签后的数据

signCheck.php

 <?php

 define("filePath","D:\\digitalCertificate\\");//.pfx和.cer文件放置的地址
define("cerFileName","jsc.cer");//.cer文件名 /*实现.cer文件转为.pem文件*/
$certificateCAcer = filePath.cerFileName;
$certificateCAcerContent = file_get_contents($certificateCAcer);
$certificateCApem=filePath.cerFileName.'.pem';
file_put_contents($certificateCApem,$certificateCAcerContent); /*实现传来的数据进行排序*/
function dataSort($data) {
$dataArr=explode(";",$data);
sort($dataArr);
$dataStr=implode(',',$dataArr);
$TransData=str_replace(",","&",$dataStr);
return $TransData;
} /*实现验签功能*/
function verify($data, $sign) {
$pubKey = file_get_contents(filePath.cerFileName.'.pem');
$res = openssl_get_publickey($pubKey);
$result = (bool)openssl_verify($data, base64_decode($sign), $res);
openssl_free_key($res);
if($result) {
return "true";
}else {
return "false";
}
}
$signData='';//用户实现验签是传进的参数,不能修改为双引号,因为用户传进的参数内部含有双引号 // $signData='code=12313&email=admin@qq.com&id=25536&name=amdin&pass=admin&signType="RSA"&sign=LLYTYTDzoehSCIoRLreVMYeBnlpB6ESVZ29VsvrYwhTPXJ0OzNlMs3t3L+FoqULwe9+p3mmY1YFqk8g4oOZzUpblrt0xEE6qDBakvSJDmoBsQi3CHRxcXtxiMcZO4w/JFPnj0ld6DfeNPsjg43OjLA7sgBGc3jj2eb/3KpsL/yAXziXJdrfdRKfXsIejxrsLQna7UwxaBZKeyY48ZYTJgMUX9dQemRHOe3lcJkGUJTJuKRjykwvXWQmoZJIvu/DBrQ9vJIIZOUOMDCPC3QQJrtZsxr1uNssZ6NlV/eVhKbFPEjZeCm+53RNsfirl12GCtv68eQC0CpVUEwuw4kLkNA==';//测试时sign.php中生成的加签数据 $data=explode('&signType="RSA"&sign=',$signData)[0];
$sign=explode('&signType="RSA"&sign=',$signData)[1]; echo (verify(dataSort($data),$sign)); //返回验签结果,成功则为true,否则为false

pfx,cer转pem,并对通过pem文件进行签名与验签的更多相关文章

  1. 关于x509、crt、cer、key、csr、pem、der、ssl、tls 、openssl等

    关于x509.crt.cer.key.csr.pem.der.ssl.tls .openssl等 TLS:传输层安全协议 Transport Layer Security的缩写 TLS是传输层安全协议 ...

  2. PKCS pfx cer x509

    PKCS pfx cer x509 参考 PKCS 15 个标准 PKCS The Public-Key Cryptography Standards (PKCS)是由美国RSA数据安全公司及其合作伙 ...

  3. 全面解决.Net与Java互通时的RSA加解密问题,使用PEM格式的密钥文件

    作者: zyl910 一.缘由 RSA是一种常用的非对称加密算法.所以有时需要在不用编程语言中分别使用RSA的加密.解密.例如用Java做后台服务端,用C#开发桌面的客户端软件时. 由于 .Net.J ...

  4. windows下shopex农行支付接口开发笔记

    1.首先是配置Java和tomcat 农行文档里的是linux下的说明.window下我们要按照以下在setclasspath.bat里设置JAVA_HOME,JRE_HOME(红色字体部分).设置这 ...

  5. 关于 IdentityServer4 中的 Jwt Token 与 Reference Token

    OpenID Connect(Core),OAuth 2.0(RFC 6749),JSON Web Token (JWT)(RFC 7519) 之间有着密不可分联系,对比了不同语言的实现,还是觉得 I ...

  6. 支付接口中常用的加密解密以及验签rsa,md5,sha

    一.常用加密类型分类 1.对称加密:采用单钥对信息进行加密和解密,即同一个秘钥既可以对信息进行加密,也可以进行解密.此类型称之为对称加密.特点速度快,常用于对大量数据信息或文件加密时使用.常用例子:D ...

  7. SHA256WithRSA

    在上文中了解到SHA和RSA,工作中恰好用到扩展应用:SHA256WithRSA,本文总结下学习过程,备忘の 再提供另外一种方法,实现Java版pem密钥和.Net版xml密钥相互转换的方法 密钥转换 ...

  8. [转载]OpenSSL中文手册之命令行详解(未完待续)

     声明:OpenSSL之命令行详解是根据卢队长发布在https://blog.csdn.net/as3luyuan123/article/details/16105475的系列文章整理修改而成,我自己 ...

  9. IdentityServer4系列 | 快速搭建简易项目

    一 .前言 从上一篇关于 常见术语说明中,主要是对IdentityServer4的说明,以及其中涉及常见的术语的表述说明,包括对身份认证服务器.用户.客户端.资源以及各个令牌等进行对比区别说明. 而在 ...

随机推荐

  1. javaWeb 使用cookie显示商品浏览记录

    package de.bvb.cookie; import java.io.IOException; import java.io.PrintWriter; import java.util.Date ...

  2. ubuntu下配置tomcat

    配置tomcat 1.解压 tar -zxvf apache-tomcat-7.0.53.tar.gz 2.修改/bin/catalina.sh cygwin=falsedarwin=falseos4 ...

  3. linux用户栈内核栈的设置---进程的创建: fork/execve【转】

    转自:http://blog.csdn.net/u011279649/article/details/18795547 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 应用层怎 ...

  4. bash环境变量读取顺序

    bash环境变量读取顺序: 交互式登录的用户: /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bas ...

  5. PHP多表取数据的代码优化

    <?php header("Content-type: text/html; charset=utf-8"); //假设这里的$goods_arr  和 $shop_arr  ...

  6. HDU 1520:Anniversary party(树形DP)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=1520 Anniversary party Problem Description   There i ...

  7. recycleview中使用checkbox导致的重复选中问题

    参考博文:http://www.myexception.cn/mobile/1852852.html 在使用RecycleView做仿微信图片选择器,其中条目中使用了checkbox,在选中时由于ho ...

  8. Spring+Quartz实现定时执行任务的配置

    1.要想使用Quartz 必须要引入相关的包:以下是我在项目中gradle中的配置: compile 'org.quartz-scheduler:quartz:2.1.1' 2.Scheduler的配 ...

  9. two day python基础知识

    1.调用功能 ---- -在同一个目录下,调用用户名密码登陆模块 2.创建文件夹 import os #os模块 os.mkdir ("new_dd3")# 创建文件夹 三元 3. ...

  10. 【20160924】GOCVHelper MFC增强算法(2)

    //创建或续写目录下的csv文件,填写“文件位置-分类”对     int writeCsv(const string& filename,const Vector<pair<st ...