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&amp;&amp;mysql)五
Oct 09 PHP
php表单提交问题的解决方法
Apr 12 PHP
php 日期和时间的处理-郑阿奇(续)
Jul 04 PHP
php 启动报错如何解决
Jan 17 PHP
Laravel 5框架学习之模型、控制器、视图基础流程
Apr 08 PHP
PHP封装CURL扩展类实例
Jul 28 PHP
YII Framework框架教程之日志用法详解
Mar 14 PHP
PHP面向对象程序设计之命名空间与自动加载类详解
Dec 02 PHP
laravel实现按时间日期进行分组统计方法示例
Mar 23 PHP
Laravel自动生成UUID,从建表到使用详解
Oct 24 PHP
深入解析PHP底层机制及相关原理
Dec 11 PHP
php 文件上传至OSS及删除远程阿里云OSS文件
Jul 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检测数组长度函数sizeof与count用法
2014/11/17 PHP
phpmailer绑定邮箱的实现方法
2016/12/01 PHP
Laravel使用原生sql语句并调用的方法
2019/10/09 PHP
基于Jquery的实现回车键Enter切换焦点
2010/09/14 Javascript
整理的比较全的event对像在ie与firefox浏览器中的区别
2013/11/25 Javascript
基于Vue2.0+ElementUI实现表格翻页功能
2017/10/23 Javascript
jsonp跨域及实现百度首页联想功能的方法
2018/08/30 Javascript
LayUI数据接口返回实体封装的例子
2019/09/12 Javascript
微信小程序 (地址选择1)--选取搜索地点并显示效果
2019/12/17 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
2020/07/19 Javascript
浅谈实现在线预览PDF的几种解决办法
2020/08/10 Javascript
vue缓存之keep-alive的理解和应用详解
2020/11/02 Javascript
Python中的面向对象编程详解(上)
2015/04/13 Python
python实现根据ip地址反向查找主机名称的方法
2015/04/29 Python
Python在线运行代码助手
2016/07/15 Python
Python编程修改MP3文件名称的方法
2017/04/19 Python
Python+tkinter使用80行代码实现一个计算器实例
2018/01/16 Python
Python多线程threading和multiprocessing模块实例解析
2018/01/29 Python
numpy数组之存取文件的实现示例
2019/05/24 Python
python opencv minAreaRect 生成最小外接矩形的方法
2019/07/01 Python
利用python为PostgreSQL的表自动添加分区
2021/01/18 Python
python 实现图片裁剪小工具
2021/02/02 Python
Marc Jacobs彩妆官网:Marc Jacobs Beauty
2017/07/03 全球购物
英国手工布艺沙发在线购买:Sofas & Stuff
2018/03/02 全球购物
Nike爱尔兰官方网站:Nike.com (IE)
2018/03/12 全球购物
Java里面如何创建一个内部类的实例
2015/01/19 面试题
公司综合部的成员自我评价分享
2013/11/05 职场文书
室内设计专业个人的自我评价
2013/12/18 职场文书
入党积极分子学习优秀共产党员先进事迹思想汇报
2014/09/13 职场文书
思想作风整顿个人剖析材料
2014/10/06 职场文书
2015年基层党组织公开承诺书
2015/01/21 职场文书
亮剑观后感300字
2015/06/05 职场文书
nginx配置文件使用环境变量的操作方法
2021/06/02 Servers
Python上下文管理器Content Manager
2021/06/26 Python
python中urllib包的网络请求教程
2022/04/19 Python
MySQL 逻辑备份 into outfile
2022/05/15 MySQL