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连接access数据库
Mar 27 PHP
使用Smarty 获取当前日期时间和格式化日期时间的方法详解
Jun 18 PHP
destoon网站转移服务器后搜索汉字出现乱码的解决方法
Jun 21 PHP
PHP获取服务器端信息的方法
Nov 28 PHP
ThinkPHP中redirect用法分析
Dec 05 PHP
使用新浪微博API的OAuth认证发布微博实例
Mar 27 PHP
PHP实现将textarea的值根据回车换行拆分至数组
Jun 10 PHP
php实现比较两个文件夹异同的方法
Jun 18 PHP
使用PHPStorm+XDebug搭建单步调试环境
Nov 19 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
Feb 25 PHP
Yii框架getter与setter方法功能与用法分析
Oct 22 PHP
PHP实现计算器小功能
Aug 28 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
极典R601SW收音机
2021/03/02 无线电
php中获取关键词及所属来源搜索引擎名称的代码
2011/02/15 PHP
PHP高级对象构建 多个构造函数的使用
2012/02/05 PHP
jQuery的实现原理的模拟代码 -3 事件处理
2010/08/03 Javascript
基于JavaScript实现继承机制之构造函数方法对象冒充的使用详解
2013/05/07 Javascript
js输入框邮箱自动提示功能代码实现
2013/12/10 Javascript
浅析JavaScript中的事件机制
2015/06/04 Javascript
jQuery实现鼠标划过添加和删除class的方法
2015/06/26 Javascript
谈谈Jquery中的children find 的区别有哪些
2015/10/19 Javascript
JS遍历数组及打印数组实例分析
2016/01/21 Javascript
ionic实现滑动的三种方式
2016/08/27 Javascript
Angular JS数据的双向绑定详解及实例
2016/12/31 Javascript
Vue.js 插件开发详解
2017/03/29 Javascript
js canvas实现擦除效果示例代码
2017/04/26 Javascript
详解webpack解惑:require的五种用法
2017/06/09 Javascript
在Vue项目中引入JQuery-ui插件的讲解
2019/01/27 jQuery
JS中的算法与数据结构之列表(List)实例详解
2019/08/16 Javascript
ElementUI多个子组件表单的校验管理实现
2019/11/07 Javascript
解决vue 退出动画无效的问题
2020/08/09 Javascript
Python中删除文件的程序代码
2011/03/13 Python
python操作MySQL数据库的方法分享
2012/05/29 Python
在Django同1个页面中的多表单处理详解
2017/01/25 Python
django中的HTML控件及参数传递方法
2018/03/20 Python
Python获取时间范围内日期列表和周列表的函数
2019/08/05 Python
Tensorflow:转置函数 transpose的使用详解
2020/02/11 Python
django序列化时使用外键的真实值操作
2020/07/15 Python
巴西香水和化妆品购物网站:The Beauty Box
2019/09/03 全球购物
Myprotein亚太地区:欧洲第一在线运动营养品牌
2020/12/20 全球购物
linux面试题参考答案(3)
2012/09/13 面试题
家长对孩子评语
2014/01/30 职场文书
校园学雷锋广播稿
2014/10/08 职场文书
2014年接待工作总结
2014/11/26 职场文书
2014年路政工作总结
2014/12/10 职场文书
CSS3 制作精美的定价表
2021/04/06 HTML / CSS
从np.random.normal()到正态分布的拟合操作
2021/06/02 Python
解析高可用Redis服务架构分析与搭建方案
2021/06/20 Redis