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+DBM的同学录程序(3)
Oct 09 PHP
第一节--面向对象编程
Nov 16 PHP
discuz7 phpMysql操作类
Jun 21 PHP
php实现利用phpexcel导出数据
Aug 24 PHP
PHP判断远程图片或文件是否存在的实现代码
Feb 20 PHP
php的declare控制符和ticks教程(附示例)
Mar 21 PHP
CI框架验证码CAPTCHA辅助函数用法实例
Nov 05 PHP
8个PHP程序员常用的功能汇总
Dec 18 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
Jan 08 PHP
PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)
Sep 11 PHP
PHP实现SMTP邮件的发送实例
Sep 27 PHP
如何在PHP环境中使用ProtoBuf数据格式
Jun 19 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
Smarty日期时间操作方法示例
2016/11/15 PHP
硬盘浏览程序,保存成网页格式便可使用
2006/12/03 Javascript
JavaScript中的细节分析
2012/06/30 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
JavaScript中关键字 in 的使用方法详解
2016/10/17 Javascript
js调用刷新界面的几种方式
2017/05/03 Javascript
浅谈Angular路由复用策略
2017/10/04 Javascript
jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能示例
2017/10/19 jQuery
vue中$set的使用(结合在实际应用中遇到的坑)
2018/07/10 Javascript
这应该是最详细的响应式系统讲解了
2019/07/22 Javascript
vue element自定义表单验证请求后端接口验证
2019/12/11 Javascript
JavaScript闭包原理与用法学习笔记
2020/05/29 Javascript
纯JS开发baguetteBox.js响应式画廊插件
2020/06/28 Javascript
jQuery中event.target和this的区别详解
2020/08/13 jQuery
[48:11]完美世界DOTA2联赛 Magma vs GXR 第二场 11.07
2020/11/10 DOTA
Python字符串格式化的方法(两种)
2017/09/19 Python
使用python实现ANN
2017/12/20 Python
python 字典中文key处理,读取,比较方法
2018/07/06 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
2019/04/29 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
2019/11/07 Python
python实现布隆过滤器及原理解析
2019/12/08 Python
Alba Moda德国网上商店:意大利时尚女装销售
2016/11/14 全球购物
Superdry瑞典官网:英国日本街头风品牌
2017/05/17 全球购物
伦敦一家领先的精品零售商:IRIS Fashion
2019/05/24 全球购物
小学生获奖感言范文
2014/02/02 职场文书
大学军训感言1000字
2014/02/25 职场文书
2014年四风问题个人对照自查剖析材料
2014/09/15 职场文书
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
小学生优秀评语
2014/12/29 职场文书
入党积极分子培养人意见
2015/06/02 职场文书
2019班干部竞选演讲稿范本!
2019/07/08 职场文书
30岁前绝不能错过的10本书
2019/08/08 职场文书
golang 生成对应的数据表struct定义操作
2021/04/28 Golang
探究Mysql模糊查询是否区分大小写
2021/06/11 MySQL
豆瓣2021评分最高动画剧集-豆瓣评分最高的动画剧集2021
2022/03/18 日漫