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 友好URL的实现(吐血推荐)
Oct 04 PHP
在PHP中使用X-SendFile头让文件下载更快
Jun 01 PHP
PHP中使用CURL获取页面title例子
Jan 07 PHP
PHP实现页面静态化的超简单方法
Sep 06 PHP
PHP单例模式定义与使用实例详解
Feb 06 PHP
Mac系统完美安装PHP7详细教程
Jun 06 PHP
[原创]PHP实现SQL语句格式化功能的方法
Jul 28 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
Sep 27 PHP
php实现对文件压缩简单的方法
Sep 29 PHP
php实现映射操作实例详解
Oct 02 PHP
PHP如何通过date() 函数格式化显示时间
Nov 13 PHP
PHP之header函数详解
Mar 02 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
微信公众号OAuth2.0网页授权问题浅析
2017/01/21 PHP
PHP多种序列化/反序列化的方法详解
2017/06/23 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
ThinkPHP5 的简单搭建和使用详解
2018/11/15 PHP
PHP 实现 WebSocket 协议原理与应用详解
2020/04/22 PHP
javascript 中对象的继承〔转贴〕
2007/01/22 Javascript
基于jquery的跨域调用文件
2010/11/19 Javascript
JS Map 和 List 的简单实现代码
2013/07/08 Javascript
JS实现根据文件字节数返回文件大小的方法
2016/08/02 Javascript
js中json处理总结之JSON.parse
2016/10/14 Javascript
jQuery实现模拟flash头像裁切上传功能示例
2016/12/11 Javascript
js图片轮播插件的封装
2017/07/21 Javascript
bootstrap时间插件daterangepicker使用详解
2017/10/19 Javascript
微信小程序使用toast消息对话框提示用户忘记输入用户名或密码功能【附源码下载】
2017/12/09 Javascript
解决vue 打包发布去#和页面空白的问题
2018/09/04 Javascript
Vue登录主页动态背景短视频制作
2019/09/21 Javascript
Bootstrap table 实现树形表格联动选中联动取消功能
2019/09/30 Javascript
netbeans7安装python插件的方法图解
2013/12/24 Python
Python 列表(List)操作方法详解
2014/03/11 Python
使用Turtle画正螺旋线的方法
2017/09/22 Python
编写多线程Python服务器 最适合基础
2018/09/14 Python
python 实现语音聊天机器人的示例代码
2018/12/02 Python
TensorFlow tf.nn.conv2d_transpose是怎样实现反卷积的
2020/04/20 Python
Flask模板引擎Jinja2使用实例
2020/04/23 Python
Python计算信息熵实例
2020/06/18 Python
使用css3和jquery实现可伸缩搜索框
2014/02/12 HTML / CSS
如何给HTML标签中的文本设置修饰线
2019/11/18 HTML / CSS
eBay法国购物网站:eBay.fr
2017/10/21 全球购物
印度购物网站:TATA CLiQ
2017/11/23 全球购物
美丽的现代设计家具:2Modern
2018/07/26 全球购物
个人思想理论学习的自我鉴定
2013/11/30 职场文书
合作协议书
2014/04/23 职场文书
2014年计生协会工作总结
2014/11/21 职场文书
2014年工程部工作总结
2014/11/25 职场文书
目标责任书格式范文
2015/05/11 职场文书
导游词之潮音寺
2019/09/26 职场文书