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 相关文章推荐
相对路径转化成绝对路径
Apr 10 PHP
PHP和javascript常用正则表达式及用法实例
Jul 01 PHP
php cookie中点号(句号)自动转为下划线问题
Oct 21 PHP
ThinkPHP中数据操作案例分析
Sep 27 PHP
php处理单文件、多文件上传代码分享
Aug 24 PHP
什么是PHP文件?如何打开PHP文件?
Jun 27 PHP
PHP预定义超全局数组变量小结
Aug 20 PHP
PHP xpath()函数讲解
Feb 11 PHP
浅谈PHP封装CURL
Mar 06 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
Nov 26 PHP
Laravel Reponse响应客户端示例详解
Sep 03 PHP
浅谈如何提高PHP代码质量之单元测试
May 28 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
简单的页面缓冲技术
2006/10/09 PHP
一个基于PDO的数据库操作类(新) 一个PDO事务实例
2011/07/03 PHP
详解php 使用Callable Closure强制指定回调类型
2017/10/26 PHP
Thinkphp 框架配置操作之配置加载与读取配置实例分析
2020/05/15 PHP
javascript中方便增删改cookie的一个类
2012/10/11 Javascript
Jquery原生态实现表格header头随滚动条滚动而滚动
2014/03/18 Javascript
node.js中的http.get方法使用说明
2014/12/14 Javascript
Javascript连接Access数据库完整实例
2015/08/03 Javascript
JS实现回到页面顶部动画效果的简单实例
2016/05/24 Javascript
js时间比较 js计算时间差的简单实现方法
2016/08/26 Javascript
使用BootStrap和Metroui设计的metro风格微网站或手机app界面
2016/10/21 Javascript
微信小程序 wx:key详细介绍
2016/10/28 Javascript
VUE开发一个图片轮播的组件示例代码
2017/03/06 Javascript
详解基于vue-cli优化的webpack配置
2017/11/06 Javascript
详解VueJS应用中管理用户权限
2018/02/02 Javascript
JavaScript 中的 this 工作原理
2018/06/20 Javascript
微信小程序自定义音乐进度条的实例代码
2018/08/28 Javascript
Javascript中parseInt的正确使用方式
2018/10/17 Javascript
微信小程序实现录音时的麦克风动画效果实例
2019/05/18 Javascript
微信小程序实现同时上传多张图片
2020/02/03 Javascript
[03:46]显微镜下的DOTA2第七期——满血与残血
2014/06/20 DOTA
python使用xmlrpc实例讲解
2013/12/17 Python
Python解析json之ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)
2017/07/06 Python
Python利用pandas计算多个CSV文件数据值的实例
2018/04/19 Python
Python读取stdin方法实例
2019/05/24 Python
使用Pandas的Series方法绘制图像教程
2019/12/04 Python
python GUI库图形界面开发之PyQt5拖放控件实例详解
2020/02/25 Python
Keras之fit_generator与train_on_batch用法
2020/06/17 Python
python属于哪种语言
2020/08/16 Python
PyCharm设置注释字体颜色以及是否倾斜的操作
2020/09/16 Python
学生宿舍管理制度
2014/01/30 职场文书
领班岗位职责范文
2014/02/06 职场文书
金融系应届毕业生求职信
2014/05/26 职场文书
暑假打工感想
2015/08/07 职场文书
CSS Transition通过改变Height实现展开收起元素
2021/08/07 HTML / CSS
win10电脑关机快捷键是哪个 win10快速关机的几种方法
2022/08/14 数码科技