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实现 使用PHP数组内部指针操作函数
Oct 12 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
Jun 23 PHP
destoon实现调用自增数字从1开始的方法
Aug 21 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
Aug 25 PHP
php 类自动载入的方法
Jun 03 PHP
UTF-8正则表达式如何匹配汉字
Aug 03 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
Apr 02 PHP
利用PHP访问带有密码的Redis方法示例
Feb 09 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
Aug 30 PHP
PHP实现的mongoDB数据库操作类完整实例
Apr 10 PHP
PHP命名空间用法实例分析
Sep 04 PHP
php array_map()函数实例用法
Mar 03 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 注册时输入信息验证器的实现详解
2013/07/05 PHP
PHP中的socket_read和socket_recv区别详解
2015/02/09 PHP
基于PHP实现数据分页显示功能
2016/05/26 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
2016/11/08 PHP
PHP批量获取网页中所有固定种子链接的方法
2016/11/18 PHP
PHP实现的简单排列组合算法应用示例
2017/06/20 PHP
json 实例详细说明教程
2009/10/31 Javascript
JS+flash实现chrome和ie浏览器下同时可以复制粘贴
2013/09/22 Javascript
String.prototype实现的一些javascript函数介绍
2013/11/22 Javascript
jquery如何通过name名称获取当前name的value值
2013/12/20 Javascript
js如何判断用户是在PC端和还是移动端访问
2014/04/24 Javascript
JavaScript实现Java中StringBuffer的方法
2015/02/09 Javascript
JavaScript中的对象和原型(一)
2016/08/12 Javascript
AngularJS2中一种button切换效果的实现方法(二)
2017/03/27 Javascript
微信小程序icon组件使用详解
2018/01/31 Javascript
clipboard.js在移动端复制失败的解决方法
2018/06/13 Javascript
Vue引用Swiper4插件无法重写分页器样式的解决方法
2018/09/27 Javascript
Python MySQLdb Linux下安装笔记
2015/05/09 Python
从Python的源码来解析Python下的freeblock
2015/05/11 Python
python编程通过蒙特卡洛法计算定积分详解
2017/12/13 Python
解决vscode python print 输出窗口中文乱码的问题
2018/12/03 Python
python3 pygame实现接小球游戏
2019/05/14 Python
Python关键字及可变参数*args,**kw原理解析
2020/04/04 Python
Python利用pip安装tar.gz格式的离线资源包
2020/09/14 Python
用html5的canvas画布绘制贝塞尔曲线完整代码
2013/08/14 HTML / CSS
实习教师自我鉴定
2013/12/12 职场文书
厂长岗位职责
2014/02/19 职场文书
大学军训感言300字
2014/03/09 职场文书
学生自我评语大全
2014/04/18 职场文书
文体活动总结范文
2014/05/05 职场文书
红色旅游心得体会
2014/09/03 职场文书
经典法律座右铭(50句)
2019/08/15 职场文书
如何在Python项目中引入日志
2021/05/31 Python
Pandas-DataFrame知识点汇总
2022/03/16 Python
oracle设置密码复杂度及设置超时退出的功能
2022/06/28 Oracle