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 相关文章推荐
1.PHP简介
Oct 09 PHP
PHP生成便于打印的网页
Oct 09 PHP
php daodb插入、更新与删除数据
Mar 19 PHP
解析PHP提交后跳转
Jun 23 PHP
php中的ini配置原理详解
Oct 14 PHP
php计算给定时间之前的函数用法实例
Apr 03 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
Aug 31 PHP
学习php设计模式 php实现单例模式(singleton)
Dec 07 PHP
PHP给文字内容中的关键字进行套红处理
Apr 12 PHP
什么是PHP文件?如何打开PHP文件?
Jun 27 PHP
PHP基于堆栈实现的高级计算器功能示例
Sep 15 PHP
php-fpm重启导致的程序执行中断问题详解
Apr 29 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 shell超强免杀、减少体积工具实现代码
2012/10/16 PHP
PHP删除非空目录的函数代码小结
2013/02/28 PHP
PHP抽奖算法程序代码分享
2015/10/08 PHP
javascript使用eval或者new Function进行语法检查
2010/10/16 Javascript
如何将php数组或者对象传递给javascript
2014/03/20 Javascript
jquery跟js初始化加载的多种方法及区别介绍
2014/04/02 Javascript
浅谈javascript的Array.prototype.slice.call
2015/08/31 Javascript
JS实现可关闭的对联广告效果代码
2015/09/14 Javascript
JS button按钮实现submit按钮提交效果
2016/11/01 Javascript
基于JS设计12306登录页面
2016/12/28 Javascript
jQuery中select与datalist制作下拉菜单时的区别浅析
2016/12/30 Javascript
小程序自定义组件实现城市选择功能
2018/07/18 Javascript
脚手架vue-cli工程webpack的作用和特点
2018/09/29 Javascript
VUE中使用MUI方法
2019/02/12 Javascript
分享JS表单验证源码(带错误提示及密码等级)
2020/01/05 Javascript
jQuery+css实现的点击图片放大缩小预览功能示例【图片预览 查看大图】
2020/05/29 jQuery
vue data对象重新赋值无效(未更改)的解决方式
2020/07/24 Javascript
[07:20]2018DOTA2国际邀请赛寻真——逐梦Mineski
2018/08/10 DOTA
python线程中同步锁详解
2018/04/27 Python
浅谈Python反射 &amp; 单例模式
2019/03/21 Python
Django获取应用下的所有models的例子
2019/08/30 Python
Python类中的装饰器在当前类中的声明与调用详解
2020/04/15 Python
django项目中使用云片网发送短信验证码的实现
2021/01/19 Python
conda安装tensorflow和conda常用命令小结
2021/02/20 Python
HTML5 语音搜索只需一句代码
2013/01/03 HTML / CSS
PurCotton全棉时代官网:100%天然棉花生产的生活护理用品
2016/11/18 全球购物
彪马西班牙官网:PUMA西班牙
2019/06/18 全球购物
家具促销活动方案
2014/02/16 职场文书
担保书怎么写
2014/04/01 职场文书
借款协议书范本
2014/04/22 职场文书
家长给学校的建议书
2014/05/15 职场文书
小学见习报告
2014/10/31 职场文书
2015年清明节网上祭英烈留言寄语
2015/03/04 职场文书
沂蒙六姐妹观后感
2015/06/08 职场文书
JavaScript中isPrototypeOf函数
2021/11/07 Javascript
JavaScript最完整的深浅拷贝实现方式详解
2022/02/28 Javascript