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来写记数器(详细介绍)
Oct 09 PHP
在IIS上安装PHP4.0正式版
Oct 09 PHP
自己在做项目过程中学到的PHP知识收集
Aug 20 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
Aug 09 PHP
php合并js请求的例子
Nov 01 PHP
php猴子选大王问题解决方法
May 12 PHP
php通过baihui网API实现读取word文档并展示
Jun 22 PHP
PHP按指定键值对二维数组进行排序的方法
Dec 22 PHP
php pthreads多线程的安装与使用
Jan 19 PHP
如何用PHP做到页面注册审核
Mar 02 PHP
Laravel中unique和exists验证规则的优化详解
Jan 28 PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
Oct 18 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读取数据库信息的几种方法
2008/05/24 PHP
PHP Array交叉表实现代码
2010/08/05 PHP
PHP写日志的实现方法
2014/11/05 PHP
js 通用订单代码
2013/12/23 Javascript
javascript学习笔记(五)原型和原型链详解
2014/10/08 Javascript
利用jQuery实现漂亮的圆形进度条倒计时插件
2015/09/30 Javascript
浅析AngularJs HTTP响应拦截器
2015/12/28 Javascript
js中最容易被忽视的事件问题大总结
2016/05/15 Javascript
HTML5 JS压缩图片并获取图片BASE64编码上传
2020/11/16 Javascript
正则验证小数点后面只能有两位数的方法
2017/02/28 Javascript
node.js实现回调的方法示例
2017/03/01 Javascript
详解Node.js中exports和module.exports的区别
2017/04/19 Javascript
vue-router 权限控制的示例代码
2017/09/21 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
2017/09/25 Javascript
实现单层json按照key字母顺序排序的示例
2017/12/06 Javascript
利用vue.js实现被选中状态的改变方法
2018/02/08 Javascript
微信小程序scroll-view横向滑动嵌套for循环的示例代码
2018/09/20 Javascript
JavaScript实现单英文金山打字通
2020/07/24 Javascript
微信小程序如何引用外部js,外部样式,公共页面模板
2019/07/23 Javascript
Python中条件判断语句的简单使用方法
2015/08/21 Python
PyQt5 窗口切换与自定义对话框的实例
2019/06/20 Python
Python实现一个数组除以一个数的例子
2019/07/20 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
2020/07/03 Python
Python gevent协程切换实现详解
2020/09/14 Python
python mock测试的示例
2020/10/19 Python
Python根据URL地址下载文件并保存至对应目录的实现
2020/11/15 Python
两种CSS3伪类选择器详细介绍
2013/12/24 HTML / CSS
天游软件面试
2013/11/23 面试题
怎么样写好简历中的自我评价
2013/10/25 职场文书
初中数学教学反思
2014/01/16 职场文书
预备党员政审材料
2014/02/04 职场文书
小学庆六一活动方案
2014/02/28 职场文书
公司离职证明标准格式
2014/11/18 职场文书
《曾国藩家书》读后感——读家书,立家风
2019/08/21 职场文书
JavaScript嵌入百度地图API的最详细方法
2021/04/16 Javascript
Oracle中update和select 关联操作
2022/01/18 Oracle