php 实现签名验签
本人php菜鸟,主要使用php实现简单的签名验签功能
以下php代码使用的密钥格式为pem格式,其他证书格式可以使用openssl进行转换(未安装请实现安装):
以下是.p12文件导出pem格式公私钥命令:
//1.生成1.key文件
openssl pkcs12 -in XXX.p12 -nocerts -nodes -out 1.key
//2.导出私钥
openssl rsa -in 1.key -out XXX.pem
writing RSA key
//3.导出公钥
openssl rsa -in 1.key -pubout -out XXX.pem
以下是.der文件导出公钥命令:
openssl x509 -inform der -in XXX.der -outform pem -out cert.pem
从 certificate 输出
openssl x509 -in cert.pem -pubkey -noout > XXX.pem
签名:
/**
* 请求内容进行签名
* @param [String] $content 请求内容-签名
*
*/
public function sign($content){
//privateKey 密钥文件绝对路径(相对路径不知道可不可以,没试过)
if(!file_exists($this->privateKey)){
throw new Exception("私钥证书不存在", 1);
}
//获取私钥证书内容
$privatePem=file_get_contents($this->privateKey);
//获取私钥
$privateKey = openssl_get_privatekey($privatePem);
//使用的加密算法官网可以查
openssl_sign($content,$resign,$privateKey,“sha256WithRSAEncryption”);
openssl_free_key($privateKey);
//返回的是aciss字符表示的字符串,根据情况再次进行编码,有的案例做的是base64编码,当然在验签的时候也要解码,我做的是转成十六进制的表示的字符串,我就不贴出来了
。。。。。。
。。。。。
return $sign;
}
验签:
/**
*
* @param [String] $data 验签原文内容
* @param [String] $sign [响应签名]
* @return [int] 验签是否通过 0:不通过 1:通过
*/
function verify($data,$sign){
if(!file_exists($this->publicKey)){
throw new Exception("公钥证书不存在", 1);
}
//获取公钥内容
$pem=file_get_contents($this->publicKey);
$publicKey=openssl_pkey_get_public($pem);
//如果对签名内容进行过编码,在事先解码会原来的内容
$flag=openssl_verify($data,$sign,“sha256WithRSAEncryption”);
openssl_free_key($publicKey);
return $flag;
}
php 实现签名验签的更多相关文章
- RSA签名验签
import android.util.Base64; import java.security.KeyFactory; import java.security.PrivateKey; import ...
- 利用SHA-1算法和RSA秘钥进行签名验签(带注释)
背景介绍 1.SHA 安全散列算法SHA (Secure Hash Algorithm)是美国国家标准和技术局发布的国家标准FIPS PUB 180-1,一般称为SHA-1.其对长度不超过264二进制 ...
- RSA密钥生成、加密解密、签名验签
RSA 非对称加密公钥加密,私钥解密 私钥签名,公钥验签 下面是生成随机密钥对: //随机生成密钥对 KeyPairGenerator keyPairGen = null; try { keyPair ...
- C# RSACryptoServiceProvider加密解密签名验签和DESCryptoServic
C#在using System.Security.Cryptography下有 DESCryptoServiceProvider RSACryptoServiceProvider DESCryptoS ...
- RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密
原文:RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密 C#在using System.Security.Cryptograph ...
- 数据安全管理:RSA加密算法,签名验签流程详解
本文源码:GitHub·点这里 || GitEE·点这里 一.RSA算法简介 1.加密解密 RSA加密是一种非对称加密,在公开密钥加密和电子商业中RSA被广泛使用.可以在不直接传递密钥的情况下,完成加 ...
- js rsa sign使用笔记(加密,解密,签名,验签)
你将会收获: js如何加密, 解密 js如何签名, 验签 js和Java交互如何相互解密, 验签(重点) 通过谷歌, 发现jsrsasign库使用者较多. 查看api发现这个库功能很健全. 本文使用方 ...
- [Python3] RSA的加解密和签名/验签实现 -- 使用pycrytodome
Crypto 包介绍: pycrypto,pycrytodome 和 crypto 是一个东西,crypto 在 python 上面的名字是 pycrypto 它是一个第三方库,但是已经停止更新,所以 ...
- .net 实现签名验签
本人被要求实现.net的签名验签,还是个.net菜鸡,来分享下采坑过程 依然,签名验签使用的证书格式依然是pem,有关使用openssl将.p12和der转pem的命令请转到php实现签名验签 .ne ...
随机推荐
- Unity Shader 00 - 梳理 Unity Shader 的基本结构
0x00 写在前面 之前一直在阅读 The Book of Shaders 一书,为什么会开始写 Unity Shader 呢?一方面,因为该书目前尚未完结,写下此文时已阅读到该书的最新章节:另一方面 ...
- 031 01 Android 零基础入门 01 Java基础语法 03 Java运算符 11 运算符的优先级
031 01 Android 零基础入门 01 Java基础语法 03 Java运算符 11 运算符的优先级 本文知识点:Java中运算符的优先级 运算符的优先级问题 前面学习了很多的运算符,如果这些 ...
- python文档下载
网址记录:https://docs.python.org/3.6/
- CPU 执行程序的秘密,藏在了这 15 张图里
前言 代码写了那么多,你知道 a = 1 + 2 这条代码是怎么被 CPU 执行的吗? 软件用了那么多,你知道软件的 32 位和 64 位之间的区别吗?再来 32 位的操作系统可以运行在 64 位的电 ...
- ubuntu1804 snort base
1.环境准备 apt安装 sudo apt-get update -y sudo apt-get dist-upgrade -y sudo apt-get install -y zlib1g-dev ...
- [源码阅读] 阿里SOFA服务注册中心MetaServer(3)
[源码阅读] 阿里SOFA服务注册中心MetaServer(3) 目录 [源码阅读] 阿里SOFA服务注册中心MetaServer(3) 0x00 摘要 0x01 概念 1.1 分布式一致性 1.2 ...
- day58 Pyhton 框架Django 01
内容回顾 python基础 网路编程 并发编程 数据库 前端 osi7层 tcp/ip 5层模型 应用层 表示层 ...
- idea创建servlet工程初体验
servlet工程创建 前提:创建项目之前需要配置java环境变量 和tomcat配置,配置完成后进入如下操作. tomcat 安装和配置参考 https://www.cnblogs.com/xush ...
- linux(centos8):为prometheus安装grafana(grafana-7.0.3)
一,grafana的用途 1,grafana是什么? grafana 是用 go 语言编写的开源应用, 它的主要用途是大规模指标数据的可视化展现 它是现在网络架构/应用分析中最流行的时序数据展示工具 ...
- java-类和数组
java内存划分 Java的内存划分为5个部分: 1.栈 (Stack) : 存放的都是方法中的局部变量,方法的运行一定要在栈当中 局部变量: 方法的参数,或者是方法()内部的变量 作用域: 一旦超出 ...