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 相关文章推荐
深入Apache与Nginx的优缺点比较详解
Jun 17 PHP
php+js实现图片的上传、裁剪、预览、提交示例
Aug 27 PHP
php生成excel文件的简单方法
Feb 08 PHP
php数组转成json格式的方法
Mar 09 PHP
php查询相似度最高的字符串的方法
Mar 12 PHP
php为字符串前后添加指定数量字符的方法
May 04 PHP
PHP实现动态执行代码的方法
Mar 25 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
Aug 12 PHP
thinkphp3.2实现在线留言提交验证码功能
Jul 19 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
php递归函数怎么用才有效
Feb 24 PHP
如何重写Laravel异常处理类详解
Dec 20 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
CodeIgniter框架数据库事务处理的设计缺陷和解决方案
2014/07/25 PHP
php在apache环境下实现gzip配置方法
2015/04/02 PHP
PHP图形操作之Jpgraph学习笔记
2015/12/25 PHP
php时间戳转换代码详解
2019/08/04 PHP
需要做特殊处理的DOM元素属性的访问
2010/11/05 Javascript
Js base64 加密解密介绍
2013/10/11 Javascript
js实现的四级左侧网站分类菜单实例
2015/05/06 Javascript
jQuery实现复选框批量选择与反选的方法
2015/06/17 Javascript
jquery仿QQ登录账号选择下拉框效果
2016/03/22 Javascript
聊一聊JS中this的指向问题
2016/06/17 Javascript
JS异步文件分片断点上传的实现思路
2016/12/25 Javascript
JS回调函数简单用法示例
2017/02/09 Javascript
超级简易的JS计算器实例讲解(实现加减乘除)
2017/08/08 Javascript
webpack本地开发环境无法用IP访问的解决方法
2018/03/20 Javascript
记录一次开发微信网页分享的步骤
2019/05/07 Javascript
html5以及jQuery实现本地图片上传前的预览代码实例讲解
2021/03/01 jQuery
python自动安装pip
2014/04/24 Python
Python写的一个定时重跑获取数据库数据
2016/12/28 Python
python之DataFrame实现excel合并单元格
2021/02/22 Python
python复制列表时[:]和[::]之间有什么区别
2018/10/16 Python
详解pytorch 0.4.0迁移指南
2019/06/16 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
python pandas dataframe 去重函数的具体使用
2020/07/20 Python
Pycharm安装python库的方法
2020/11/24 Python
Ted Baker美国官网:英国时尚品牌
2018/10/29 全球购物
幼儿园美术教学反思
2014/01/31 职场文书
乳制品整治工作方案
2014/05/29 职场文书
村级四风对照检查材料
2014/08/24 职场文书
2015年幼儿园元旦游艺活动策划书
2014/12/09 职场文书
主婚人致辞精选
2015/07/28 职场文书
员工规章制度范本
2015/08/07 职场文书
Python list去重且保持原顺序不变的方法
2021/04/03 Python
Python自然语言处理之切分算法详解
2021/04/25 Python
Python词云的正确实现方法实例
2021/05/08 Python
通过Python把学姐照片做成拼图游戏
2022/02/15 Python
vue的项目如何打包上线
2022/04/13 Vue.js