pfx,cer转pem,并对通过pem文件进行签名与验签
因为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文件进行签名与验签的更多相关文章
- 关于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是传输层安全协议 ...
- PKCS pfx cer x509
PKCS pfx cer x509 参考 PKCS 15 个标准 PKCS The Public-Key Cryptography Standards (PKCS)是由美国RSA数据安全公司及其合作伙 ...
- 全面解决.Net与Java互通时的RSA加解密问题,使用PEM格式的密钥文件
作者: zyl910 一.缘由 RSA是一种常用的非对称加密算法.所以有时需要在不用编程语言中分别使用RSA的加密.解密.例如用Java做后台服务端,用C#开发桌面的客户端软件时. 由于 .Net.J ...
- windows下shopex农行支付接口开发笔记
1.首先是配置Java和tomcat 农行文档里的是linux下的说明.window下我们要按照以下在setclasspath.bat里设置JAVA_HOME,JRE_HOME(红色字体部分).设置这 ...
- 关于 IdentityServer4 中的 Jwt Token 与 Reference Token
OpenID Connect(Core),OAuth 2.0(RFC 6749),JSON Web Token (JWT)(RFC 7519) 之间有着密不可分联系,对比了不同语言的实现,还是觉得 I ...
- 支付接口中常用的加密解密以及验签rsa,md5,sha
一.常用加密类型分类 1.对称加密:采用单钥对信息进行加密和解密,即同一个秘钥既可以对信息进行加密,也可以进行解密.此类型称之为对称加密.特点速度快,常用于对大量数据信息或文件加密时使用.常用例子:D ...
- SHA256WithRSA
在上文中了解到SHA和RSA,工作中恰好用到扩展应用:SHA256WithRSA,本文总结下学习过程,备忘の 再提供另外一种方法,实现Java版pem密钥和.Net版xml密钥相互转换的方法 密钥转换 ...
- [转载]OpenSSL中文手册之命令行详解(未完待续)
声明:OpenSSL之命令行详解是根据卢队长发布在https://blog.csdn.net/as3luyuan123/article/details/16105475的系列文章整理修改而成,我自己 ...
- IdentityServer4系列 | 快速搭建简易项目
一 .前言 从上一篇关于 常见术语说明中,主要是对IdentityServer4的说明,以及其中涉及常见的术语的表述说明,包括对身份认证服务器.用户.客户端.资源以及各个令牌等进行对比区别说明. 而在 ...
随机推荐
- SELECT INTO和INSERT INTO SELECT
--自动创建了target_table表,并复制source_table表的数据到target_table select name,age into target_table from source_ ...
- JVM 指令集
指令码 助记符 说明 0x00 nop 什么都不做 0x01 aconst_null 将null推送至栈顶 0x02 iconst_m1 将int型-1推送至栈顶 0x03 iconst_0 将int ...
- Java中的TreeMap、Comparable、Comparator
我们知道HashMap的存储位置是按照key这个对象的hashCode来存放的,而TreeMap则是不是按照hashCode来存放,他是按照实现的Comparable接口的compareTo这个方法来 ...
- HDU 4417:Super Mario(主席树)
http://acm.hdu.edu.cn/showproblem.php?pid=4417 题意是:给出n个数和q个询问,每个询问有一个l,r,h,问在[l,r]这个区间里面有多少个数是小于等于h的 ...
- Yahoo! s4和Twitter storm的粗略比较
- [UML]转:UML类图集中关系的总结
转:http://blog.csdn.net/dragonpeng2008/article/details/6836448 在UML类图中,常见的有以下几种关系: 泛化(Generalization) ...
- 1014 C语言文法定义与C程序的推导过程 程序:冒泡算法C程序(语法树)
阅读并理解提供给大家的C语言文法文件. 参考该文件写出一个自己好理解版的现实版的完整版的C语言文法. 给出一段C程序,画出用上述文法产生这段C程序的完整语法树. 程序:冒泡算法C程序 点此文字查看原图 ...
- 2012年"浪潮杯"山东省第三届ACM大学生程序设计竞赛--n a^o7 ! 分类: 比赛 2015-06-09 17:16 14人阅读 评论(0) 收藏
n a^o7 ! Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 All brave and intelligent fighte ...
- jquery闭包的使用
<div id="divTest"> Test </div> <br /> <hr /> <div id="divT ...
- oneThink安装出错解决
在Wampserver3.0.0(apache2.4.17+php5.6.15+mysql5.7.9)版本中oneThink安装用1.1github版,不要用1.1开发版,不然安装的时候数据库导入时b ...