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 5.0 Pear安装方法
Dec 06 PHP
PHP 程序员也要学会使用“异常”
Jun 16 PHP
php curl 伪造IP来源的实例代码
Nov 01 PHP
解析php中memcache的应用
Jun 18 PHP
php使用strtotime和date函数判断日期是否有效代码分享
Dec 25 PHP
递归删除一个节点以及该节点下的所有节点示例
Mar 19 PHP
PHP CURL 多线程操作代码实例
May 13 PHP
php函数mkdir实现递归创建层级目录
Oct 27 PHP
PHP+Ajax 检测网络是否正常实例详解
Dec 16 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
Sep 16 PHP
Laravel等框架模型关联的可用性浅析
Dec 15 PHP
PHP正则表达式之RCEService回溯
Apr 11 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
PHP中路径问题的解决方案
2006/10/09 PHP
PHP小技巧搜集,每个PHPer都来露一手
2007/01/02 PHP
Zend studio文件注释模板设置方法
2013/09/29 PHP
PHP中使用BigMap实例
2015/03/30 PHP
PHP实现随机生成水印图片功能
2017/03/22 PHP
php中Redis的应用--消息传递
2017/03/28 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
php获得刚插入数据的id 的几种方法总结
2018/05/31 PHP
ThinkPHP5.0框架使用build 自动生成模块操作示例
2019/04/11 PHP
Yii框架通过请求组件处理get,post请求的方法分析
2019/09/03 PHP
HR vs CL BO3 第一场 2.13
2021/03/10 DOTA
改写一个简单的菜单 弹性大小
2010/12/02 Javascript
prettify 代码高亮着色器google出品
2010/12/28 Javascript
javascript基础之查找元素的详细介绍(访问节点)
2013/07/05 Javascript
js实现改进的仿蓝色论坛导航菜单效果代码
2015/09/06 Javascript
jQuery代码实现图片墙自动+手动淡入淡出切换效果
2016/05/09 Javascript
Vue.js每天必学之过渡与动画
2016/09/06 Javascript
JavaScript数据结构之链表的实现
2017/03/19 Javascript
AngularJS基于provider实现全局变量的读取和赋值方法
2017/06/28 Javascript
使用AngularJS对表单提交内容进行验证的操作方法
2017/07/12 Javascript
jquery实现楼层滚动效果
2018/01/01 jQuery
Node.js 的 GC 机制详解
2019/06/03 Javascript
解决vue项目router切换太慢问题
2020/07/19 Javascript
python安装Scrapy图文教程
2017/08/14 Python
Python使用matplotlib实现绘制自定义图形功能示例
2018/01/18 Python
Django的CVB实例详解
2020/02/10 Python
如何打包Python Web项目实现免安装一键启动的方法
2020/05/21 Python
html5自定义video标签的海报与播放按钮功能
2019/12/04 HTML / CSS
Bogner美国官网:滑雪服中的”Dior”
2018/01/30 全球购物
自我鉴定怎么写
2013/12/05 职场文书
高三语文教学反思
2014/01/15 职场文书
环境保护建议书
2014/08/26 职场文书
百年校庆宣传标语口号
2015/12/26 职场文书
创业计划书之甜品店
2019/09/18 职场文书
golang三种设计模式之简单工厂、方法工厂和抽象工厂
2022/04/10 Golang
腾讯云服务器部署前后分离项目之前端部署
2022/06/28 Servers