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 身份验证方面的函数
Oct 11 PHP
php木马webshell扫描器代码
Jan 25 PHP
PHP闭包(Closure)使用详解
May 02 PHP
php利用腾讯ip分享计划获取地理位置示例分享
Jan 20 PHP
php反射应用示例
Feb 25 PHP
PHP中UNIX时间戳和日期间的转换与计算实例
Nov 19 PHP
PHP中模拟链表和链表的基本操作示例
Feb 27 PHP
php is_executable判断给定文件名是否可执行实例
Sep 26 PHP
PHP实现的各类hash算法长度及性能测试实例
Aug 27 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
PHP实现正则表达式分组捕获操作示例
Feb 03 PHP
php基于协程实现异步的方法分析
Jul 17 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递归使用示例(php递归函数)
2014/02/14 PHP
PHP判断远程图片是否存在的几种方法
2014/05/04 PHP
php面向对象与面向过程两种方法给图片添加文字水印
2015/08/26 PHP
PHP中的异常处理机制深入讲解
2020/11/10 PHP
如何在标题栏显示框架内页面的标题
2007/02/03 Javascript
jQuery隔行变色与普通JS写法的对比
2013/04/21 Javascript
通过JS来判断页面控件是否获取焦点
2014/01/03 Javascript
js加入收藏夹代码(兼容ie/ff/op)
2014/05/16 Javascript
基于jQuery实现多层次的手风琴效果附源码
2015/09/21 Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
2016/05/21 Javascript
jQuery表单对象属性过滤选择器实例详解
2016/09/13 Javascript
详解使用angular的HttpClient搭配rxjs
2017/09/01 Javascript
angular项目中bootstrap-datetimepicker时间插件的使用示例
2018/03/15 Javascript
nodejs实现范围请求的实现代码
2018/10/12 NodeJs
微信小程序实现预览图片功能
2020/10/22 Javascript
手把手带你搭建一个node cli的方法示例
2020/08/07 Javascript
Postman环境变量全局变量使用方法详解
2020/08/13 Javascript
[42:50]NB vs VP 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python操作Mysql实例代码教程在线版(查询手册)
2013/02/18 Python
web.py在SAE中的Session问题解决方法(使用mysql存储)
2015/06/24 Python
详解Python命令行解析工具Argparse
2016/04/20 Python
python与php实现分割文件代码
2017/03/06 Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
2018/02/21 Python
浅谈Python接口对json串的处理方法
2018/12/19 Python
Pycharm新手教程(只需要看这篇就够了)
2019/06/18 Python
深入了解Python枚举类型的相关知识
2019/07/09 Python
CSS3使用transition属性实现过渡效果
2018/04/18 HTML / CSS
Myprotein葡萄牙官方网站:英国优质运动营养品牌
2016/09/12 全球购物
英国婚礼商城:Wedding Mall
2019/11/02 全球购物
香港百佳网上超级市场:PARKNSHOP.com
2020/06/10 全球购物
你对IPv6了解程度
2016/02/09 面试题
工业设计专业自荐书
2014/06/05 职场文书
教师批评与自我批评发言稿
2014/10/15 职场文书
领导班子整改方案
2014/10/25 职场文书
前端vue+express实现文件的上传下载示例
2022/02/18 Vue.js
Mybatis 一级缓存和二级缓存原理区别
2022/09/23 Java/Android