PHP基于openssl实现非对称加密代码实例


Posted in PHP onJune 19, 2020

使用非对称加密主要是借助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
MVC模式的PHP实现
Oct 09 PHP
推荐php模板技术[转]
Jan 04 PHP
php4与php5的区别小结(配置异同)
Dec 20 PHP
PHP 第二节 数据类型之转换
Apr 28 PHP
使用swoole扩展php websocket示例
Feb 13 PHP
dedecms函数分享之获取某一栏目所有子栏目
May 19 PHP
PHP常用处理静态操作类
Apr 03 PHP
php中实现进程锁与多进程的方法
Sep 18 PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
Jul 22 PHP
Laravel5.4框架中视图共享数据的方法详解
Sep 05 PHP
解决Laravel5.2 Auth认证退出失效的问题
Oct 14 PHP
如何在PHP环境中使用ProtoBuf数据格式
Jun 19 #PHP
基于PHP实现堆排序原理及实例详解
Jun 19 #PHP
深入分析PHP设计模式
Jun 15 #PHP
Laravel6.18.19如何优雅的切换发件账户
Jun 14 #PHP
Laravel服务容器绑定的几种方法总结
Jun 14 #PHP
Laravel如何实现适合Api的异常处理响应格式
Jun 14 #PHP
Yii redis集合的基本使用教程
Jun 14 #PHP
You might like
php数据库配置文件一般做法分享
2012/07/07 PHP
php中heredoc与nowdoc介绍
2014/12/25 PHP
PHP 设计模式系列之 specification规格模式
2016/01/10 PHP
PHP实现微信提现功能
2018/09/30 PHP
php微信公众号开发之二级菜单
2018/10/20 PHP
PHP实现爬虫爬取图片代码实例
2021/03/03 PHP
js获取触发事件元素在整个网页中的绝对坐标(示例代码)
2013/12/13 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
2014/01/02 Javascript
JS获取网页属性包括宽、高等等
2014/04/03 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
jQuery根据元素值删除数组元素的方法
2015/06/24 Javascript
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
2017/11/28 Javascript
详解vue的diff算法原理
2018/05/20 Javascript
js+html实现点名系统功能
2019/11/05 Javascript
nuxt.js服务端渲染中axios和proxy代理的配置操作
2020/11/06 Javascript
基于JavaScript实现随机点名器
2021/02/25 Javascript
布同 Python中文问题解决方法(总结了多位前人经验,初学者必看)
2011/03/13 Python
简单介绍Python2.x版本中的cmp()方法的使用
2015/05/20 Python
Django框架下在URLconf中指定视图缓存的方法
2015/07/23 Python
关于Python 3中print函数的换行详解
2017/08/08 Python
Python 比较两个数组的元素的异同方法
2017/08/17 Python
MAC中PyCharm设置python3解释器
2017/12/15 Python
python虚拟环境完美部署教程
2019/08/06 Python
Python自动登录QQ的实现示例
2020/08/28 Python
MoviePy常用剪辑类及Python视频剪辑自动化
2020/12/18 Python
美国最大的高尔夫发球时间预订网站:TeeOff.com
2018/03/28 全球购物
ShellScript面试题一则-ShellScript编程
2014/03/05 面试题
JAVA程序员面试题
2012/10/03 面试题
应聘护士自荐信
2013/10/21 职场文书
空中乘务员岗位职责
2014/03/08 职场文书
《爱如茉莉》教后反思
2014/04/12 职场文书
优秀员工推荐材料
2014/12/20 职场文书
2015年路政工作总结
2015/05/22 职场文书
未婚证明格式
2015/06/15 职场文书
五一晚会主持词
2015/07/01 职场文书
NodeJs使用webpack打包项目的方法详解
2022/02/28 NodeJs