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 相关文章推荐
提问的智慧
Oct 09 PHP
PR值查询 | PageRank 查询
Dec 20 PHP
PHP中用header图片地址 简单隐藏图片源地址
Apr 09 PHP
PHP mb_convert_encoding 获取字符串编码类型实现代码
Apr 26 PHP
php获取文件夹路径内的图片以及分页显示示例
Mar 11 PHP
给ECShop添加最新评论
Jan 07 PHP
PHP生成各种随机验证码的方法总结【附demo源码】
Jun 05 PHP
PHP实现正则匹配所有括号中的内容
Jun 22 PHP
laravel中的一些简单实用功能
Nov 03 PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
Mar 08 PHP
小程序微信退款功能实现方法详解【基于thinkPHP】
May 05 PHP
PHP二维索引数组的遍历实例分析【2种方式】
Jun 24 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
Win下如何安装PHP的APC拓展
2013/08/07 PHP
php实现检查文章是否被百度收录
2015/01/27 PHP
PHP实现QQ快速登录的方法
2016/09/28 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
如何在centos8自定义目录安装php7.3
2019/11/28 PHP
javascript优先加载笔记代码
2008/09/30 Javascript
JavaScript CSS菜单功能 改进版
2008/12/20 Javascript
学习javascript面向对象 实例讲解面向对象选项卡
2016/01/04 Javascript
js实现为a标签添加事件的方法(使用闭包循环)
2016/08/02 Javascript
Javascript 实现计算器时间功能详解及实例(二)
2017/01/08 Javascript
JS变量及其作用域
2017/03/29 Javascript
深入理解vue.js中$watch的oldvalue与newValue
2017/08/07 Javascript
浅谈在fetch方法中添加header后遇到的预检请求问题
2017/08/31 Javascript
微信小程序checkbox组件使用详解
2018/01/31 Javascript
解决vue 更改计算属性后select选中值不更改的问题
2018/03/02 Javascript
详解Vue组件之间通信的七种方式
2019/04/14 Javascript
layui关闭弹窗后刷新主页面和当前更改项的例子
2019/09/06 Javascript
[45:25]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
python类参数self使用示例
2014/02/17 Python
python执行get提交的方法
2015/04/29 Python
python2.7无法使用pip的解决方法(安装easy_install)
2018/04/03 Python
简单了解Python生成器是什么
2019/07/02 Python
对DJango视图(views)和模版(templates)的使用详解
2019/07/17 Python
python字符串分割及字符串的一些常规方法
2019/07/24 Python
django项目用higcharts统计最近七天文章点击量
2019/08/17 Python
HTML5+css3:3D旋转木马效果相册
2017/01/03 HTML / CSS
英国剑桥包官网:The Cambridge Satchel Company
2016/08/01 全球购物
巴西最大的巴士票务门户:Quero Passagem
2020/11/21 全球购物
教师实习自我鉴定
2013/12/18 职场文书
幼儿园清明节活动总结
2014/07/04 职场文书
幼儿教师师德师风演讲稿
2014/08/22 职场文书
幼儿园学前班幼儿评语
2014/12/29 职场文书
2015年社区流动人口工作总结
2015/05/12 职场文书
二胎满月酒致辞
2015/07/29 职场文书
《秋思》教学反思
2016/02/23 职场文书
Nginx配置https原理及实现过程详解
2021/03/31 Servers