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的说明,以及其中涉及常见的术语的表述说明,包括对身份认证服务器.用户.客户端.资源以及各个令牌等进行对比区别说明. 而在 ...
随机推荐
- html5 canvas 笔记一(基本用法与绘制图形)
<canvas> 元素 <canvas id="tutorial" width="150" height="150"> ...
- hdwiki 在IIS 下的伪静态
HDwiki有SEO设置的功能,此功能可以将HDwiki的页面进行URL静态化转换,从而使HDwiki内容更容易被搜索引擎挖掘,提高被收录的机率.注意事项 1.本功能对服务器环境有特殊要 ...
- 20145227 《Java程序设计》第9周学习总结
20145227 <Java程序设计>第9周学习总结 教材学习内容总结 1.JDBC简介 JDBC全名Java DataBase Connectivity,是java联机数据库的标准规范. ...
- [HTML]JS添加表格
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- ACM题目————Aggressive cows
Description Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stal ...
- Area(Pick定理POJ1256)
Area Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5429 Accepted: 2436 Description ...
- ZendStudio调试配置(XDebug)
服务器配置:WAMP Sever 3.0.0 调试器环境:Zend Studio 12.0 Build ID: 12.0.0.v20141117-20141115-2331-278 License: ...
- MSSQL删除字段时出现 服务器: 消息 5074,级别 16,状态 1,行 1 的解决办法
有的朋友在做用户维护字段的界面时,肯定发现一个问题,当用脚本:ALTER TABLE 表名 DROP COLUMN 字段名进行删除字段的操作时,会出现“服务器: 消息 5074,级别 16,状态 1, ...
- CSU 1114 平方根大搜索 java大数
1114: 平方根大搜索 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 49 Solved: 23[Submit][Status][Web Board ...
- livereload的简单使用
一/直接使用:npm install -g livereload 全局安装 http-server 起到服务 livereload启动 在html中引入<script src="ht ...