PHP基于openssl实现的非对称加密操作示例


Posted in PHP onJanuary 11, 2019

本文实例讲述了PHP基于openssl实现的非对称加密操作。分享给大家供大家参考,具体如下:

使用非对称加密主要是借助openssl的公钥和私钥,用公钥加密私钥解密,或者私钥加密公钥解密。

1.安装openssl和php的openssl扩展

2.生成私钥:openssl genrsa 用于生成rsa私钥文件,生成是可以指定私钥长度和密码保护

openssl genrsa -out rsa_private_key.pem 1024

3.生成公钥:rsa命令用于处理RSA密钥、格式转换和打印信息

openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

4.这里我们使用私钥加密,公钥解密

<?php
/**
* 密钥文件的路径
*/
$privateKeyFilePath = 'rsa_private_key.pem';
/**
* 公钥文件的路径
*/
$publicKeyFilePath = 'rsa_public_key.pem';
extension_loaded('openssl') or die('php需要openssl扩展支持');
(file_exists($privateKeyFilePath) && file_exists($publicKeyFilePath)) or die('密钥或者公钥的文件路径不正确');
/**
* 生成Resource类型的密钥,如果密钥文件内容被破坏,openssl_pkey_get_private函数返回false
*/
$privateKey = openssl_pkey_get_private(file_get_contents($privateKeyFilePath));
/**
* 生成Resource类型的公钥,如果公钥文件内容被破坏,openssl_pkey_get_public函数返回false
*/
$publicKey = openssl_pkey_get_public(file_get_contents($publicKeyFilePath));
($privateKey && $publicKey) or die('密钥或者公钥不可用');
/**
* 原数据
*/
$originalData = '加密前hahahaha';
/**
* 加密以后的数据,用于在网路上传输
*/
$encryptData = '';
echo '原数据为:', $originalData, PHP_EOL;
///////////////////////////////用私钥加密////////////////////////
if (openssl_private_encrypt($originalData, $encryptData, $privateKey)) {
  /**
   * 加密后 可以base64_encode后方便在网址中传输 或者打印 否则打印为乱码
   */
  echo '加密成功,加密后数据(base64_encode后)为:', base64_encode($encryptData), PHP_EOL;
} else {
  die('加密失败');
}
///////////////////////////////用公钥解密////////////////////////
/**
* 解密以后的数据
*/
$decryptData ='';
if (openssl_public_decrypt($encryptData, $decryptData, $publicKey)) {
  echo '解密成功,解密后数据为:', $decryptData, PHP_EOL;
} else {
  die('解密成功');
}
PHP 相关文章推荐
PHP静态新闻列表自动生成代码
Jun 14 PHP
PHP教程 预定义变量
Oct 23 PHP
PHP APC配置文件2套和参数详解
Jun 11 PHP
php常用文件操作函数汇总
Nov 22 PHP
PHP定时执行任务的3种方法详解
Dec 21 PHP
PHP如何将XML转成数组
Apr 04 PHP
PHP实现递归目录的5种方法
Oct 27 PHP
PHP模拟http请求的方法详解
Nov 09 PHP
微信第三方登录(原生)demo【必看篇】
May 26 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 PHP
Thinkphp 框架配置操作之动态配置、扩展配置及批量配置实例分析
May 15 PHP
PHP强制转化的形式整理
May 22 PHP
PHP类的自动加载机制实现方法分析
Jan 10 #PHP
PHP验证类的封装与使用方法详解
Jan 10 #PHP
tp5(thinkPHP5)框架数据库Db增删改查常见操作总结
Jan 10 #PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
Jan 10 #PHP
tp5框架使用composer实现日志记录功能示例
Jan 10 #PHP
PHP微信支付结果通知与回调策略分析
Jan 10 #PHP
php如何利用pecl安装mongodb扩展详解
Jan 09 #PHP
You might like
实现分十页分向前十页向后十页的处理
2006/10/09 PHP
php cookie 登录验证示例代码
2009/03/16 PHP
PHP中JSON的应用技巧
2015/10/10 PHP
在php中设置session用memcache来存储的方法总结
2016/01/14 PHP
php微信公众号开发之微信企业付款给个人
2018/10/04 PHP
Laravel框架Eloquent ORM简介、模型建立及查询数据操作详解
2019/12/04 PHP
仿163填写邮件地址自动显示下拉(无优化)
2008/11/05 Javascript
javascript 动态加载 css 方法总结
2009/07/11 Javascript
js防止表单重复提交实现代码
2012/09/05 Javascript
javascript运动详解
2015/07/06 Javascript
jQuery插件开发精品教程让你的jQuery提升一个台阶
2016/01/27 Javascript
Vuejs第八篇之Vuejs组件的定义实例解析
2016/09/05 Javascript
解决URL地址中的中文乱码问题的办法
2017/02/10 Javascript
bootstrap3-dialog-master模态框使用详解
2017/08/22 Javascript
jquery.onoff实现简单的开关按钮功能(推荐)
2018/05/24 jQuery
在vue2.0中引用element-ui组件库的方法
2018/06/21 Javascript
浅析JS中回调函数及用法
2018/07/25 Javascript
vue上传图片到oss的方法示例(图片带有删除功能)
2018/09/27 Javascript
详解一次Vue低版本安卓白屏问题的解决过程
2019/05/30 Javascript
javascript设计模式 ? 建造者模式原理与应用实例分析
2020/04/10 Javascript
[03:57]2016完美“圣”典风云人物:rOtk专访
2016/12/09 DOTA
[01:51]历届DOTA2国际邀请赛举办地回顾 TI9落地上海
2018/08/26 DOTA
django 使用全局搜索功能的实例详解
2019/07/18 Python
python socket 聊天室实例代码详解
2019/11/14 Python
PyCharm使用之配置SSH Interpreter的方法步骤
2019/12/26 Python
PyQt5中多线程模块QThread使用方法的实现
2020/01/31 Python
python反编译教程之2048小游戏实例
2021/03/03 Python
HTML5 解决苹果手机不能自动播放音乐问题
2017/12/27 HTML / CSS
毕业生个人求职自荐信
2014/02/26 职场文书
怀念母亲教学反思
2014/04/28 职场文书
店面出租协议书范本
2014/11/28 职场文书
2015欢度元旦标语口号
2014/12/09 职场文书
2015年家长学校工作总结
2015/04/22 职场文书
公司规章制度范本
2015/08/03 职场文书
Javascript的promise,async和await的区别详解
2022/03/24 Javascript
台积电称即便经济低迷也没有降价的计划
2022/04/21 数码科技