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 相关文章推荐
使用adodb lite解决问题
Dec 31 PHP
mysql,mysqli,PDO的各自不同介绍
Sep 19 PHP
php时间戳转换的示例
Mar 31 PHP
ThinkPHP采用实现三级循环代码实例
Jul 18 PHP
smarty中js的调用方法示例
Oct 27 PHP
分享一段PHP制作的中文拼音首字母工具类
Dec 11 PHP
PHP中SESSION的注销与清除
Apr 16 PHP
PHP生成可点击刷新的验证码简单示例
May 13 PHP
php5.3后静态绑定用法详解
Nov 11 PHP
PHP操作Redis数据库常用方法示例
Aug 25 PHP
php实现微信小程序授权登录功能(实现流程)
Nov 13 PHP
Yii Framework框架开发微信公众平台示例
Apr 26 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 max_execution_time执行时间问题
2011/07/17 PHP
Yii使用技巧大汇总
2015/12/29 PHP
php自定义函数实现JS的escape的方法示例
2016/07/07 PHP
php常用字符串String函数实例总结【转换,替换,计算,截取,加密】
2016/12/07 PHP
Javascript 浮点运算的问题分析与解决方法
2013/08/27 Javascript
关闭浏览器时提示onbeforeunload事件
2013/12/25 Javascript
js获得页面的高度和宽度的方法
2014/02/23 Javascript
javascript中interval与setTimeOut的区别示例介绍
2014/03/14 Javascript
jQuery 计算iframe 窗口大小的方法
2014/05/13 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
2015/12/31 Javascript
基于jQuery仿淘宝产品图片放大镜特效
2020/10/19 Javascript
深入解析JavaScript中的立即执行函数
2016/05/21 Javascript
JavaScript自学笔记(必看篇)
2016/06/23 Javascript
JavaScript实现简单精致的图片左右无缝滚动效果
2017/03/16 Javascript
PHP实现记录代码运行时间封装类实例教程
2017/05/08 Javascript
BetterScroll 在移动端滚动场景的应用
2017/09/18 Javascript
Vue分页效果与购物车功能
2019/12/13 Javascript
JavaScript this使用方法图解
2020/02/04 Javascript
js实现简单图片拖拽效果
2021/02/22 Javascript
python3编写C/S网络程序实例教程
2014/08/25 Python
Python 实现 贪吃蛇大作战 代码分享
2016/09/07 Python
详解Python with/as使用说明
2018/12/13 Python
Tensorflow之梯度裁剪的实现示例
2020/03/08 Python
使用python脚本自动生成K8S-YAML的方法示例
2020/07/12 Python
Python操作word文档插入图片和表格的实例演示
2020/10/25 Python
使用Django的JsonResponse返回数据的实现
2021/01/15 Python
如何用css3实现switch组件开关的方法
2018/02/09 HTML / CSS
利用HTML5 Canvas制作一个简单的打飞机游戏
2015/05/11 HTML / CSS
打造经典复古风格的品牌:Alice + Olivia(爱丽丝+奥利维亚)
2016/09/07 全球购物
服务中心夜班服务员岗位职责
2013/11/27 职场文书
装修致歉信
2014/01/15 职场文书
合作经营协议书
2014/04/17 职场文书
八一建军节演讲稿
2014/09/10 职场文书
出售房屋协议书范本
2014/10/06 职场文书
教师批评与自我批评范文
2014/10/15 职场文书
css 边框添加四个角的实现代码
2021/10/16 HTML / CSS