PHP基于openssl实现的非对称加密操作示例


Posted in PHP onJanuary 11, 2019

本文实例讲述了PHP基于openssl实现的非对称加密操作。分享给大家供大家参考,具体如下:

使用非对称加密主要是借助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 相关文章推荐
在PHP3中实现SESSION的功能(一)
Oct 09 PHP
php表单转换textarea换行符的方法
Sep 10 PHP
php 中英文语言转换类代码
Aug 11 PHP
教你如何解密 “ PHP 神盾解密工具 ”
Jun 20 PHP
完美实现wordpress禁止文章修订和自动保存的方法
Nov 03 PHP
PHP中的闭包(匿名函数)浅析
Feb 07 PHP
smarty模板引擎之内建函数用法
Mar 30 PHP
php准确获取文件MIME类型的方法
Jun 17 PHP
整理php防注入和XSS攻击通用过滤
Sep 13 PHP
CodeIgniter自定义控制器MY_Controller用法分析
Jan 20 PHP
Yii2 输出xml格式数据的方法
May 03 PHP
PHP 实现手机端APP支付宝支付功能
Jun 07 PHP
PHP类的自动加载机制实现方法分析
Jan 10 #PHP
PHP验证类的封装与使用方法详解
Jan 10 #PHP
tp5(thinkPHP5)框架数据库Db增删改查常见操作总结
Jan 10 #PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
Jan 10 #PHP
tp5框架使用composer实现日志记录功能示例
Jan 10 #PHP
PHP微信支付结果通知与回调策略分析
Jan 10 #PHP
php如何利用pecl安装mongodb扩展详解
Jan 09 #PHP
You might like
使用php shell命令合并图片的代码
2011/06/23 PHP
php与java通过socket通信的实现代码
2013/10/21 PHP
php实现递归的三种基本方式
2020/07/04 PHP
laravel框架之数据库查出来的对象实现转化为数组
2019/10/23 PHP
javascript调试说明
2010/06/07 Javascript
前台js调用后台方法示例
2013/12/02 Javascript
使用jquery animate创建平滑滚动效果(可以是到顶部、到底部或指定地方)
2014/05/27 Javascript
使用forever管理nodejs应用教程
2014/06/03 NodeJs
理解javascript中DOM事件
2015/12/25 Javascript
javascript的理解及经典案例分析
2016/05/20 Javascript
JavaScript 中对象的深拷贝
2016/12/04 Javascript
AngularJS学习第二篇 AngularJS依赖注入
2017/02/13 Javascript
js简单实现网页换肤功能
2017/04/07 Javascript
使用Angular-CLI构建NPM包的方法
2018/09/07 Javascript
详解angularjs跨页面传参遇到的一些问题
2018/11/01 Javascript
从0到1构建vueSSR项目之node以及vue-cli3的配置
2019/03/07 Javascript
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
Python中装饰器兼容加括号和不加括号的写法详解
2017/07/05 Python
11月编程语言排行榜 Python逆袭C#上升到第4
2017/11/15 Python
python机器学习库常用汇总
2017/11/15 Python
Python中django学习心得
2017/12/06 Python
python+pandas分析nginx日志的实例
2018/04/28 Python
python实现写数字文件名的递增保存文件方法
2018/10/25 Python
树莓派实现移动拍照
2019/06/22 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
2019/10/18 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
2020/02/25 Python
CSS3 :default伪类选择器使用简介
2018/03/15 HTML / CSS
美国户外服装和装备购物网站:Outland USA
2020/03/22 全球购物
继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?
2015/11/18 面试题
三分钟演讲稿事例
2014/03/03 职场文书
模特大赛策划方案
2014/05/28 职场文书
2015年护士长个人工作总结
2015/04/24 职场文书
闭幕词的写作格式与范文!
2019/06/24 职场文书
MySQL删除和插入数据很慢的问题解决
2021/06/03 MySQL
动画「半妖的夜叉姬」新BD特典图公开
2022/03/22 日漫
【海涛教你打DOTA】剑圣第一人称视角解说
2022/04/01 DOTA