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
PHP生成静态页面详解
Nov 19 PHP
php 获取mysql数据库信息代码
Mar 12 PHP
php_xmlhttp 乱码问题解决方法
Aug 07 PHP
用PHP代替JS玩转DOM的思路及示例代码
Jun 15 PHP
PHP实现服务器状态监控的方法
Dec 09 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
Dec 17 PHP
PHP数组操作――获取数组最后一个值的方法
Apr 14 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
Apr 25 PHP
php车辆违章查询数据示例
Oct 14 PHP
php排序算法实例分析
Oct 17 PHP
Yii2框架中一些折磨人的坑
Dec 15 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内存管理之谁动了我的内存
2013/06/20 PHP
JavaScript创建命名空间的5种写法
2014/06/24 PHP
php中strstr、strrchr、substr、stristr四个函数的区别总结
2014/09/22 PHP
ThinkPHP 404页面的设置方法
2015/01/14 PHP
JavaScript 判断判断某个对象是Object还是一个Array
2010/01/28 Javascript
JS实现self的resend
2010/07/22 Javascript
js导航菜单(自写)简单大方
2013/03/28 Javascript
jquery判断至少有一个checkbox被选中的方法
2015/06/05 Javascript
详解Node.js中的事件机制
2016/09/22 Javascript
JS公共小方法之判断对象是否为domElement的实例
2016/11/25 Javascript
Vue2.0 UI框架ElementUI使用方法详解
2017/04/14 Javascript
Nodejs搭建wss服务器教程
2017/05/24 NodeJs
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
2017/11/22 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
2017/12/08 Javascript
nodejs express配置自签名https服务器的方法
2018/05/22 NodeJs
vue click.stop阻止点击事件继续传播的方法
2018/09/04 Javascript
axios 封装上传文件的请求方法
2018/09/26 Javascript
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
2020/03/20 jQuery
[06:10]6.81新信使新套装!给你一个炫酷的DOTA2
2014/05/06 DOTA
在Python中操作字符串之startswith()方法的使用
2015/05/20 Python
python实现搜索本地文件信息写入文件的方法
2016/02/22 Python
python3中str(字符串)的使用教程
2017/03/23 Python
Python实现钉钉订阅消息功能
2020/01/14 Python
css3 box-shadow阴影(外阴影与外发光)图示讲解
2017/08/11 HTML / CSS
加拿大最大的体育用品、鞋类和服装零售商:Sport Chek
2018/11/29 全球购物
俄罗斯厨房产品购物网站:COOK HOUSE
2021/03/15 全球购物
杭州时比特电子有限公司SQL
2013/08/22 面试题
采用怎样的方法保证数据的完整性
2013/12/02 面试题
结婚喜宴主持词
2014/03/14 职场文书
领导班子四风对照检查材料范文
2014/09/27 职场文书
财务部会计岗位职责
2015/02/03 职场文书
大学生军训感言
2015/08/01 职场文书
网吧员工管理制度
2015/08/05 职场文书
教学副校长工作总结
2015/08/13 职场文书
升职感谢领导的话语及升职感谢信
2019/06/24 职场文书
goland设置颜色和字体的操作
2021/05/05 Golang