PHP中使用OpenSSL生成证书及加密解密


Posted in PHP onFebruary 05, 2017

依赖于OpenSSL扩展

/*加密解密*/
function authcode($string, $operation = 'E') {
  $ssl_public = file_get_contents(DATA_PATH."/conf/cert_public.key");
  $ssl_private = file_get_contents(DATA_PATH."/conf/cert_private.pem");
  $pi_key = openssl_pkey_get_private($ssl_private);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id
  $pu_key = openssl_pkey_get_public($ssl_public);//这个函数可用来判断公钥是否是可用的
  if(false == ($pi_key || $pu_key)) return '证书错误';
  $data = "";
  if($operation=='D'){
    openssl_private_decrypt(base64_decode($string),$data,$pi_key);//私钥解密
  }else{
    openssl_public_encrypt($string,$data,$pu_key);//公钥加密
    $data = base64_encode($data);
  }
  return $data;
}
/*生成证书*/
function exportOpenSSLFile(){
  $config = array(
    "digest_alg"    => "sha512",
    "private_key_bits" => 4096,           //字节数  512 1024 2048  4096 等
    "private_key_type" => OPENSSL_KEYTYPE_RSA,   //加密类型
  );
  $res = openssl_pkey_new($config);
  if($res == false) return false;
  openssl_pkey_export($res, $private_key);
  $public_key = openssl_pkey_get_details($res);
  $public_key = $public_key["key"];
  file_put_contents(DATA_PATH."/conf/cert_public.key",$public_key);
  file_put_contents(DATA_PATH."/conf/cert_private.pem",$private_key);
  openssl_free_key($res);
}

更多关于OpenSS的文章可以查看下面的相关文章

PHP 相关文章推荐
一个显示某段时间内每个月的方法 返回由这些月份组成的数组
May 16 PHP
PHP实现获取中英文首字母
Jun 19 PHP
使用PHP和JavaScript判断请求是否来自微信内浏览器
Aug 18 PHP
适用于初学者的简易PHP文件上传类
Oct 29 PHP
Laravel中Trait的用法实例详解
Mar 16 PHP
初识ThinkPHP控制器
Apr 07 PHP
PHPExcel笔记, mpdf导出
May 03 PHP
PHP设计模式之迭代器模式
Jun 17 PHP
PHP获取本周所有日期或者最近七天所有日期的方法
Jun 20 PHP
详解Laravel5.6 Passport实现Api接口认证
Jul 27 PHP
PHP日志LOG类定义与用法示例
Sep 06 PHP
PHP获取访问设备信息的方法示例
Feb 20 PHP
PHP的中使用非缓冲模式查询数据库的方法
Feb 05 #PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
Feb 05 #PHP
php实现给二维数组中所有一维数组添加值的方法
Feb 04 #PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
Feb 04 #PHP
php加密之discuz内容经典加密方式实例详解
Feb 04 #PHP
yii2实现 "上一篇,下一篇" 功能的代码实例
Feb 04 #PHP
PHP正则表达式匹配替换与分割功能实例浅析
Feb 04 #PHP
You might like
日本收入最高的漫画家:海贼王作者版税年收入高达8.45亿元
2020/03/04 日漫
PHP读写文件的方法(生成HTML)
2006/11/27 PHP
Windows服务器中PHP如何安装redis扩展
2019/09/27 PHP
jquery ui resizable bug解决方法
2010/10/26 Javascript
javascript学习笔记(四) Number 数字类型
2012/06/19 Javascript
jquery获取radio值实例
2014/10/16 Javascript
Eclipse配置Javascript开发环境图文教程
2015/01/29 Javascript
JS组件Bootstrap dropdown组件扩展hover事件
2016/04/17 Javascript
JavaScript中用let语句声明作用域的用法讲解
2016/05/20 Javascript
Bootstrap按钮功能之查询按钮和重置按钮
2016/10/26 Javascript
JS常用算法实现代码
2016/11/14 Javascript
关于JS Lodop打印插件打印Bootstrap样式错乱问题的解决方案
2016/12/23 Javascript
在vue中使用公共过滤器filter的方法
2018/06/26 Javascript
原生JS封装_new函数实现new关键字的功能
2018/08/12 Javascript
vue路由中前进后退的一些事儿
2019/05/18 Javascript
微信小程序前端自定义分享的实现方法
2019/06/13 Javascript
详解vuex之store源码简单解析
2019/06/13 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
layui button 按钮弹出提示窗口,确定才进行的方法
2019/09/06 Javascript
[50:01]Ti4 冒泡赛第二天 NEWBEE vs Titan
2014/07/15 DOTA
编写Python小程序来统计测试脚本的关键字
2016/03/12 Python
利用python编写一个图片主色转换的脚本
2017/12/07 Python
python快速编写单行注释多行注释的方法
2019/07/31 Python
Python通过zookeeper实现分布式服务代码解析
2020/07/22 Python
Matplotlib 绘制饼图解决文字重叠的方法
2020/07/24 Python
5个你不知道的HTML5的接口介绍
2013/08/07 HTML / CSS
广州某公司软件工程师面试题
2014/12/22 面试题
门卫工作岗位职责
2013/12/17 职场文书
师范学院毕业生求职信范文
2013/12/26 职场文书
物流专业大学的自我评价
2014/01/11 职场文书
导游实习生自荐书
2014/01/28 职场文书
新闻学专业职业生涯规划范文:我的人生我做主
2014/09/12 职场文书
法人身份证明书
2014/10/08 职场文书
解决jupyter notebook图片显示模糊和保存清晰图片的操作
2021/04/24 Python
Go语言基础函数基本用法及示例详解
2021/11/17 Golang
js中Map和Set的用法及区别实例详解
2022/02/15 Javascript