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 相关文章推荐
dede3.1分页文字采集过滤规则详说(图文教程)
Apr 03 PHP
PHP读取文件并可支持远程文件的代码分享
Oct 03 PHP
PHP远程采集图片详细教程
Jul 01 PHP
PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)
Jul 05 PHP
php简单获取目录列表的方法
Mar 24 PHP
php opendir()列出目录下所有文件的实例代码
Oct 02 PHP
Laravel 5.4重新登录实现跳转到登录前页面的原理和方法
Jul 13 PHP
laravel如何开启跨域功能示例详解
Aug 31 PHP
php记录搜索引擎爬行记录的实现代码
Mar 02 PHP
tp5递归 无限级分类详解
Oct 18 PHP
php的instanceof和判断闭包Closure操作示例
Jan 26 PHP
php+mysql实现的无限分类方法类定义与使用示例
May 27 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中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
2011/05/04 PHP
PHP学习笔记(二):变量详解
2015/04/17 PHP
PHPTree――php快速生成无限级分类
2018/03/30 PHP
PHP递归遍历文件夹去除注释并压缩php源代码的方法示例
2018/05/23 PHP
PHP单例模式数据库连接类与页面静态化实现方法
2019/03/20 PHP
用prototype实现的简单小巧的多级联动菜单
2007/03/24 Javascript
JavaScript1.6数组新特性介绍以及JQuery的几个工具方法
2013/12/06 Javascript
JavaScript阻止回车提交表单的方法
2015/12/30 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
2016/04/17 Javascript
webpack 样式加载的实现原理
2018/06/12 Javascript
JavaScript实现数字前补“0”的五种方法示例
2019/01/03 Javascript
使用jQuery如何写一个含验证码的登录界面
2019/05/13 jQuery
基于vue 实现表单中password输入的显示与隐藏功能
2019/07/19 Javascript
JS window对象简单操作完整示例
2020/01/14 Javascript
koa2 数据api中间件设计模型的实现方法
2020/07/13 Javascript
JavaScript实现移动小精灵的案例代码
2020/12/12 Javascript
python递归计算N!的方法
2015/05/05 Python
python万年历实现代码 含运行结果
2017/05/20 Python
Django 如何获取前端发送的头文件详解(推荐)
2017/08/15 Python
python实现数独游戏 java简单实现数独游戏
2018/03/30 Python
python中字符串的操作方法大全
2018/06/03 Python
python统计字母、空格、数字等字符个数的实例
2018/06/29 Python
Python学习笔记之列表和成员运算符及列表相关方法详解
2019/08/22 Python
在主流系统之上安装Pygame的方法
2020/05/20 Python
纯CSS改变webkit内核浏览器的滚动条样式
2014/04/17 HTML / CSS
纽约的奢华内衣店:Journelle
2016/07/29 全球购物
阿迪达斯丹麦官网:adidas丹麦
2016/10/01 全球购物
最便宜促销价格订机票:Airpaz(总部设在印尼,支持中文)
2018/11/13 全球购物
绝对经典成功的大学生推荐信
2013/11/08 职场文书
《玩具柜台前的孩子》教学反思
2014/02/13 职场文书
希特勒经典演讲稿
2014/05/19 职场文书
公司运动会策划方案
2014/05/25 职场文书
励志广播稿300字(5篇)
2014/09/15 职场文书
成都人事代理协议书
2014/10/25 职场文书
政审证明材料
2015/06/19 职场文书
Meta增速拉垮,元宇宙难当重任
2022/04/29 数码科技