PHP下SSL加密解密、验证、签名方法(很简单)


Posted in PHP onJune 28, 2020

超级简单,依赖于OpenSSL扩展,这里就不多废话了,直接奉上代码

签名:

function sign($data) {
 //读取私钥文件
 $priKey = file_get_contents('key/rsa_private_key.pem');
 
 //转换为openssl密钥,必须是没有经过pkcs8转换的私钥
 $res = openssl_get_privatekey($priKey);
 
 //调用openssl内置签名方法,生成签名$sign
 openssl_sign($data, $sign, $res);
 
 //释放资源
 openssl_free_key($res);
 
 return $sign;
}

验证:

function verify($data, $sign) {
 //读取支付宝公钥文件
 $pubKey = file_get_contents('key/alipay_public_key.pem');
 
 //转换为openssl格式密钥
 $res = openssl_get_publickey($pubKey);
 
 //调用openssl内置方法验签,返回bool值
 $result = (bool)openssl_verify($data, $sign, $res);
 
 //释放资源
 openssl_free_key($res);
 
 return $result;

解密

function decrypt($content) {
 
 //读取商户私钥
 $priKey = file_get_contents('key/rsa_private_key.pem');
 
 //转换为openssl密钥,必须是没有经过pkcs8转换的私钥
 $res = openssl_get_privatekey($priKey);
 
 //声明明文字符串变量
 $result = '';
 
 //循环按照128位解密
 for($i = 0; $i < strlen($content)/128; $i++ ) {
 $data = substr($content, $i * 128, 128);
  
 //拆分开长度为128的字符串片段通过私钥进行解密,返回$decrypt解析后的明文
 openssl_private_decrypt($data, $decrypt, $res);
 
 //明文片段拼接
 $result .= $decrypt;
 }
 
 //释放资源
 openssl_free_key($res);
 
 //返回明文
 return $result;
}

希望本文所述对大家学习php程序设计有所帮助。

PHP 相关文章推荐
创建配置文件 用PHP写出自己的BLOG系统 2
Apr 12 PHP
常用的PHP数据库操作方法(MYSQL版)
Jun 08 PHP
使用php+apc实现上传进度条且在IE7下不显示的问题解决方法
Apr 25 PHP
PHP迭代器实现斐波纳契数列的函数
Nov 12 PHP
PHP打开和关闭文件操作函数总结
Nov 18 PHP
PHP使用memcache缓存技术提高响应速度的方法
Dec 26 PHP
php检查字符串中是否包含7位GSM字符的方法
Mar 17 PHP
Yii控制器中filter过滤器用法分析
Jul 15 PHP
PHP面试常用算法(推荐)
Jul 22 PHP
php微信开发接入
Aug 27 PHP
微信JSSDK分享功能图文实例详解
Apr 08 PHP
laravel 框架执行流程与原理简单分析
Feb 01 PHP
深入浅析php json 格式控制
Dec 24 #PHP
PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
Dec 24 #PHP
盘点PHP和ASP.NET的10大对比!
Dec 24 #PHP
php采用session实现防止页面重复刷新
Dec 24 #PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
Dec 23 #PHP
分享PHP计算两个日期相差天数的代码
Dec 23 #PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
Dec 23 #PHP
You might like
PHP获取文件后缀名的三个函数
2012/10/15 PHP
Bootstrap学习笔记之css样式设计(2)
2016/06/07 Javascript
Javascript之Date对象详解
2016/06/07 Javascript
引用jquery框架后出错的解决方法
2016/08/09 Javascript
浅析jQuery操作select控件的取值和设值
2016/12/07 Javascript
Mongoose学习全面理解(推荐)
2017/01/21 Javascript
JavaScript插入排序算法原理与实现方法示例
2018/08/06 Javascript
jQuery 筛选器简单操作示例
2019/10/02 jQuery
解决vue admin element noCache设置无效的问题
2019/11/12 Javascript
[04:03]DOTA2肉山黑名单梦之声 风暴之灵中文配音鉴赏
2013/07/03 DOTA
[49:17]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第三场 1月26日
2021/03/11 DOTA
手动实现把python项目发布为exe可执行程序过程分享
2014/10/23 Python
Python的面向对象思想分析
2015/01/14 Python
深入解答关于Python的11道基本面试题
2017/04/01 Python
R语言 vs Python对比:数据分析哪家强?
2017/11/17 Python
Python处理菜单消息操作示例【基于win32ui模块】
2018/05/09 Python
python itchat实现调用微信接口的第三方模块方法
2019/06/11 Python
Python虚拟环境的原理及使用详解
2019/07/02 Python
python实现七段数码管和倒计时效果
2019/11/23 Python
Python数据可视化:顶级绘图库plotly详解
2019/12/07 Python
tensorboard实现同时显示训练曲线和测试曲线
2020/01/21 Python
pytorch实现seq2seq时对loss进行mask的方式
2020/02/18 Python
使用python从三个角度解决josephus问题的方法
2020/03/27 Python
基于注解实现 SpringBoot 接口防刷的方法
2021/03/02 Python
莫斯科高科技在线商店:KremlinStore
2019/03/13 全球购物
Omio英国:搜索并比较便宜的巴士、火车和飞机
2019/08/27 全球购物
亚洲领先的设计购物网站:Pinkoi
2020/11/26 全球购物
电大自我鉴定范文
2013/10/01 职场文书
班级入场式解说词
2014/02/01 职场文书
大学生党员自我批评
2014/02/14 职场文书
小学学雷锋活动总结
2014/04/25 职场文书
2015年党性分析材料
2014/12/19 职场文书
校车安全管理责任书
2015/05/11 职场文书
教你使用TensorFlow2识别验证码
2021/06/11 Python
FFmpeg视频处理入门教程(新手必看)
2022/01/22 杂记
js 实现Material UI点击涟漪效果示例
2022/09/23 Javascript