php理解非对称SSL加密解密、验证及签名
加密方式分为对称加密和非对称加密,对称加密只使用一个秘钥,加密和解密都使用该秘钥;非对称加密则使用一对秘钥,使用公钥加密,私钥解密。
需要通过原生的openssl_public_encrypt加密,openssl_private_decrypt解密
公钥和私钥都可以用来加密数据,相反用另一个解开. (1)公钥加密数据,然后私钥解密的情况被称为加密解密.
例如:
Tskey表示Tom的私钥,Tpkey表示Tom的公钥
Bskey表示Bob的私钥,Bpkey表示Bob的公钥
Tom给Bob发消息:(用对方的公钥加密,用自己的私钥解密)这中行为加密和解密.
加密结果 = RsaEncrypt(消息内容,Bpkey);
Bob收到了Tom发送的加密后的数据,进行解密
消息内容 = RsaDecrypt(加密结果,Bskey); (2)私钥加密数据,公钥解密一般被称为签名和验证签名.
例如:
Tskey表示Tom的私钥,Tpkey表示Tom的公钥
Bskey表示Bob的私钥,Bpkey表示Bob的公钥
Tom给Bob发信: (用自己的私钥进行签名,用对方的公钥进行验证)这种行为签名和验证签名.
数字签名 = RsaSign(信件内容,Tskey);
Bob收到Tom的来信,使用Tom的公钥,验证数字签名
验证结果 = RsaVerify(信件内容,数字签名,Tpkey); 在PHP还有两种常用的数字签名分别是sha1和md5.
sha1通常是对一段内容或者一个文件进行签名,以判断信息在传输的过程中没有被修改过.
md5则常用在登录验证,将签名的结果保存到数据库中,每次登录进行签名的验证.
总结:在公钥密码体制中,公钥对别人有用,私钥对自己有用
/**
* RSA验证签名
* @param string $data 待签名数据
* @param string $sign 需要验签的签名
* @param string $publicKey App公钥, PEM格式
* 验签公钥,摘要算法为MD5
* @return bool 验签是否通过 bool值
*/
public function verifySign($data, $sign,$publickey)
{
//获取公钥
$publicKey = file_get_contents($publickey);
//转换为openssl格式密钥
$res = openssl_get_publickey($publicKey);
//调用openssl内置方法验签,返回bool值
$result = (bool)openssl_verify($data, base64_decode($sign), $res, OPENSSL_ALGO_MD5);
//释放资源
openssl_free_key($res);
//返回资源是否成功
return $result;
}
php理解非对称SSL加密解密、验证及签名的更多相关文章
- 转 关于Https协议中的ssl加密解密流程
关于Https协议中的ssl加密解密流程 2016年09月28日 09:51:15 阅读数:14809 转载自:http://www.cnblogs.com/P_Chou/archive/2010/1 ...
- RSA加密解密及RSA签名和验证
原文:RSA加密解密及RSA签名和验证 1.RSA加密解密: (1)获取密钥,这里是产生密钥,实际应用中可以从各种存储介质上读取密钥 (2)加密 (3)解密2.RSA签名和验证 (1)获取密钥,这里是 ...
- RSA加密解密及RSA签名和验证及证书
RSA加密解密及RSA签名和验证及证书 公钥是给别人的 发送密文使用公钥加密 验证签名使用公钥验证 私钥是自己保留的 接受密文使用私钥解密 发送签名使用私钥签名 上述过程逆转是不行的,比如使用私钥加密 ...
- php中rsa加密解密验证
RSA非对称加密,对敏感的数据传输进行数据加密.验证等.测试环境:wamp.aliyun虚拟主机(lamp)一.加密解密的第一步是生成公钥.私钥对,私钥加密的内容能通过公钥解密(反过来亦可以).下载生 ...
- Cryptopp iOS 使用 RSA加密解密和签名验证签名
Cryptopp 是一个c++写的功能完善的密码学工具,类似于openssl 官网:https://www.cryptopp.com 以下主要演示Cryptopp 在iOS上的RSA加密解密签名与验证 ...
- RSA 加密 解密 公钥 私钥 签名 加签 验签
http://blog.csdn.net/21aspnet/article/details/7249401# http://www.ruanyifeng.com/blog/2013/06/rsa_al ...
- openssl 非对称加密 RSA 加密解密以及签名验证签名
1. 简介 openssl rsa.h 提供了密码学中公钥加密体系的一些接口, 本文主要讨论利用rsa.h接口开发以下功能 公钥私钥的生成 公钥加密,私钥解密 私钥加密,公钥解密 签名:私钥签名 验 ...
- .net core AES加密解密及RSA 签名验签
引用 using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Security; using System; using Sy ...
- md5加密、Des加密对称可逆加密、RSA非对称可逆加密、https单边验证、银行U盾双边认证
1.md5不可逆的加密方式,加密成一个32位的字符串.算法是公开的,任何语言的加密结果都是一样的.总有可能是重复的. 用途: (1)防止明文存储:可以用作密码加密 ...
随机推荐
- ETCD 简介及基本用法
ETCD 项目地址 ETCD 官方文档 1. 简介 ETCD 是一个高可用的分布式键值数据库,可用于服务发现.ETCD 采用 raft 一致性算法,基于 Go 语言实现. 特点 简单:安装配置使用简单 ...
- vue实现ajax请求(vue-resource和axios)
1.vue-resouce实现ajax请求 vue1中主要用vue-resouce实现ajax请求, 2.1 引用vue-resouce 引入axios,直接在index.html文件中引入; 或者在 ...
- Altium Designer chapter1总结
第一章操作基础中有以下几点需要注意: (1)随着DSP.ARM.FPGA等高速逻辑元件的应用,PCB的信号完整性与抗干扰性能显得尤为重要. (2)Altium Designer的发展史:Protel ...
- [LeetCode] 287. Find the Duplicate Number(Floyd判圈算法)
传送门 Description Given an array nums containing n + 1 integers where each integer is between 1 and n ...
- Vulhub搭建
Vulhub是一个比较全面的漏洞集合,收集了近年来许多的重要漏洞,以开源的形式呈现,以docker的形式进行环境配置,提供了更简单的漏洞复现,只需要简单的命令即可实现漏洞复现. 官网 https:/ ...
- jQuery基础--音乐视频操作
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 04 volatile关键字实现原理
volatile关键字实现原理 1.volatile关键字的语义分析 作用:让其他线程能够马上感知到某个线程多某个变量的修改 保证可见性 对共享变量的修改,其他线程能够马上感知到 保证有序性 在重排序 ...
- go 学习之bufio
bufio模块通过对io模块的封装,提供了数据缓冲功能,能够一定程度减少大块数据读写带来的开销.实际上在bufio各个组件内部都维护了一个缓冲区,数据读写操作都直接通过缓存区进行.当发起一次读写操作时 ...
- 1233: [Usaco2009Open]干草堆tower
传送门 感觉正着做不太好搞,考虑倒过来搞 容易想到贪心,每一层都贪心地选最小的宽度,然后发现 $WA$ 了... 因为一开始多选一点有时可以让下一层宽度更小 然后有一个神奇的结论,最高的方案一定有一种 ...
- nginx+lua+redis实现灰度发布_test
nginx+lua+redis实现灰度发布: 灰度发布是指在黑白之间能够平滑过渡的一种方式 AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见, ...