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 相关文章推荐
收集的DedeCMS一些使用经验
Mar 17 PHP
PHP生成excel时单元格内换行问题的解决方法
Aug 26 PHP
延长phpmyadmin登录时间的方法
Feb 06 PHP
CentOS 6.3下安装PHP xcache扩展模块笔记
Sep 10 PHP
php输出金字塔的2种实现方法
Dec 16 PHP
yii2利用自带UploadedFile实现上传图片的示例
Feb 16 PHP
老生常谈PHP 文件写入和读取(必看篇)
May 22 PHP
php数据库的增删改查 php与javascript之间的交互
Aug 31 PHP
PHP 多任务秒级定时器的实现方法
May 13 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
Jun 06 PHP
thinkPHP5框架auth权限控制类与用法示例
Jun 12 PHP
php实现JWT(json web token)鉴权实例详解
Nov 05 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
让你同时上传 1000 个文件 (二)
2006/10/09 PHP
php下使用strpos需要注意 === 运算符
2010/07/17 PHP
PHP多个版本的分析解释
2011/07/21 PHP
php之curl设置超时实例
2014/11/03 PHP
apache中为php 设置虚拟目录
2014/12/17 PHP
PHP实现通过CURL上传文件功能示例
2018/05/30 PHP
jQuery使用手册之 事件处理
2007/03/24 Javascript
Jquery+ajax请求data显示在GridView上(asp.net)
2010/08/27 Javascript
解析Javascript小括号“()”的多义性
2013/12/03 Javascript
JavaScript实现页面跳转的几种常用方式
2015/11/28 Javascript
使用jquery提交form表单并自定义action的实现代码
2016/05/25 Javascript
浅析BootStrap栅格系统
2016/06/07 Javascript
jquery实现点击页面回到顶部
2016/11/23 Javascript
jquery 删除节点 添加节点 找兄弟节点的简单实现
2016/12/07 Javascript
在百度搜索结果中去除掉一些网站的资料(通过js控制不让显示)
2017/05/02 Javascript
微信小程序自定义toast的实现代码
2018/11/16 Javascript
layui导出所有数据的例子
2019/09/10 Javascript
搭建Python的Django框架环境并建立和运行第一个App的教程
2016/07/02 Python
示例详解Python3 or Python2 两者之间的差异
2018/08/23 Python
python 制作自定义包并安装到系统目录的方法
2018/10/27 Python
python 二维数组90度旋转的方法
2019/01/28 Python
Python 基于FIR实现Hilbert滤波器求信号包络详解
2020/02/26 Python
使用pytorch实现论文中的unet网络
2020/06/24 Python
加拿大大码女装购物网站:Penningtons
2020/12/26 全球购物
医学检验专业个人求职信范文
2013/12/04 职场文书
童装店创业计划书
2014/01/09 职场文书
打架检讨书400字
2014/01/17 职场文书
幼儿园亲子活动方案
2014/01/29 职场文书
刘胡兰的英雄事迹材料
2014/02/11 职场文书
信息技术毕业生自荐信范文
2014/03/13 职场文书
体育比赛口号
2014/06/09 职场文书
俄语专业毕业生求职信
2014/07/12 职场文书
2014物价局民主生活会对照检查材料思想汇报
2014/09/24 职场文书
离婚协议书范文2014(夫妻感情破裂)
2014/12/14 职场文书
Python+Tkinter制作专属图形化界面
2022/04/01 Python
《吸血鬼:避世 血猎》官宣4.27发售 系列首款大逃杀
2022/04/03 其他游戏