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提取字符串中的图片地址[正则表达式]
Nov 12 PHP
php 获取百度的热词数据的代码
Feb 18 PHP
PHP 处理TXT文件(打开/关闭/检查/读取)
May 13 PHP
基于PHP array数组的教程详解
Jun 05 PHP
php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
Jun 18 PHP
使用PHP备份MYSQL数据的多种方法
Jan 15 PHP
微信API接口大全
Apr 15 PHP
PHP实现简单搜歌的方法
Jul 28 PHP
基于命令行执行带参数的php脚本并取得参数的方法
Jan 25 PHP
PHP Static延迟静态绑定用法分析
Mar 16 PHP
php解析mht文件转换成html的实例
Mar 13 PHP
PHP时间戳和日期相互转换操作实例小结
Dec 18 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面向对象——访问修饰符介绍
2012/11/08 PHP
php使用memcoder将视频转成mp4格式的方法
2015/03/12 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
JS代码放在head和body中的区别分析
2011/12/01 Javascript
javascript if条件判断方法小结
2014/05/17 Javascript
初识Node.js
2015/03/20 Javascript
分享js粘帖屏幕截图到web页面插件screenshot-paste
2020/08/21 Javascript
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
2016/05/16 Javascript
JavaScript的instanceof运算符学习教程
2016/06/08 Javascript
基于JavaScript实现树形下拉框
2016/08/10 Javascript
Vue.js划分组件的方法
2017/10/29 Javascript
微信小程序如何获取用户信息
2018/01/26 Javascript
vue项目webpack中Npm传递参数配置不同域名接口
2018/06/15 Javascript
对 Vue-Router 进行单元测试的方法
2018/11/05 Javascript
JS选取DOM元素常见操作方法实例分析
2018/12/10 Javascript
vue-cli点击实现全屏功能
2020/03/07 Javascript
Python显示进度条的方法
2014/09/20 Python
Python中一些自然语言工具的使用的入门教程
2015/04/13 Python
Python的Flask框架中实现登录用户的个人资料和头像的教程
2015/04/20 Python
Python快速从注释生成文档的方法
2016/12/26 Python
Python进程间通信之共享内存详解
2017/10/30 Python
Python下使用Scrapy爬取网页内容的实例
2018/05/21 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
2019/06/21 Python
pandas实现DataFrame显示最大行列,不省略显示实例
2019/12/26 Python
python实现用户名密码校验
2020/03/18 Python
解决Jupyter因卸载重装导致的问题修复
2020/04/10 Python
Django视图、传参和forms验证操作
2020/07/15 Python
一款纯css3实现的鼠标悬停动画按钮
2014/12/29 HTML / CSS
高二化学教学反思
2014/01/30 职场文书
大学生先进事迹材料
2014/02/16 职场文书
开门红主持词
2014/04/02 职场文书
经验交流材料格式
2014/12/30 职场文书
初中教师个人总结
2015/02/10 职场文书
六五普法学习心得体会
2016/01/21 职场文书
毕业欢送晚会主持词
2019/06/25 职场文书
详解前端任务构建利器Gulp.js使用指南
2021/04/30 Javascript