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中使用Oracle数据库(5)
Oct 09 PHP
php array_slice函数的使用以及参数详解
Aug 30 PHP
解析php mysql 事务处理回滚操作(附实例)
Aug 05 PHP
PHP生成指定随机字符串的简单实现方法
Apr 01 PHP
php通过分类列表产生分类树数组的方法
Apr 20 PHP
php curl请求信息和返回信息设置代码实例
Apr 27 PHP
php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)
Dec 21 PHP
PHP内核探索之变量
Dec 22 PHP
php实现scws中文分词搜索的方法
Dec 25 PHP
利用PHP自动生成印有用户信息的名片
Aug 01 PHP
浅谈PHP中try{}catch{}的使用方法
Dec 09 PHP
php输出文字乱码的解决方法
Oct 04 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将DateTime对象转化为友好时间显示的实现代码
2011/09/20 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
2013/06/29 PHP
使用php-timeit估计php函数的执行时间
2015/09/06 PHP
深入浅析php json 格式控制
2015/12/24 PHP
PHP 文件上传限制问题
2019/09/01 PHP
JS类定义原型方法的两种实现的区别评论很多
2007/09/12 Javascript
在JavaScript中构建ArrayList示例代码
2014/09/17 Javascript
jQuery使用hide方法隐藏元素自身用法实例
2015/03/30 Javascript
javascript中caller和callee详解
2015/08/10 Javascript
js父页面中使用子页面的方法
2016/01/09 Javascript
微信小程序 参数传递详解
2016/10/24 Javascript
微信小程序中单位rpx和rem的使用
2016/12/06 Javascript
浅谈JS验证表单文本域输入空格的问题
2017/02/14 Javascript
解决easyui日期时间框ie的兼容的问题
2018/03/01 Javascript
JavaScript中set与get方法用法示例
2018/08/15 Javascript
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
2018/09/15 Javascript
js实现坦克大战游戏
2020/02/24 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
2020/10/19 Javascript
解决antd日期选择组件,添加value就无法点击下一年和下一月问题
2020/10/29 Javascript
[01:14:34]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第一局
2016/02/28 DOTA
python赋值操作方法分享
2013/03/23 Python
开源Web应用框架Django图文教程
2017/03/09 Python
关于Python如何避免循环导入问题详解
2017/09/14 Python
Python图像处理之颜色的定义与使用分析
2019/01/03 Python
使用Python自动化破解自定义字体混淆信息的方法实例
2019/02/13 Python
python如何以表格形式打印输出的方法示例
2019/06/21 Python
Django中提供的6种缓存方式详解
2019/08/05 Python
pytorch获取vgg16-feature层输出的例子
2019/08/20 Python
使用Python和百度语音识别生成视频字幕的实现
2020/04/09 Python
Django REST Framework 分页(Pagination)详解
2020/11/30 Python
Trench London官方网站:高级风衣和意大利皮夹克
2020/07/11 全球购物
酒店周年庆活动方案
2014/08/21 职场文书
神秘岛读书笔记
2015/07/01 职场文书
2016年春季运动会加油稿
2015/07/22 职场文书
python中os.path.join()函数实例用法
2021/05/26 Python
Java由浅入深通关抽象类与接口(下篇)
2022/04/26 Java/Android