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 相关文章推荐
文件上传类
Oct 09 PHP
修改了一个很不错的php验证码(支持中文)
Feb 14 PHP
php 删除记录实现代码
Mar 12 PHP
使用zend studio for eclipse不能激活代码提示功能的解决办法
Oct 11 PHP
ThinkPHP之import方法实例详解
Jun 20 PHP
PHP将HTML转换成文本的实现代码
Jan 21 PHP
smarty内置函数section的用法
Jan 22 PHP
php验证码生成代码
Nov 11 PHP
微信支付开发动态链接Native支付
Jul 12 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
Dec 14 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
Feb 15 PHP
PHP+swoole+linux实现系统监控和性能优化操作示例
Apr 15 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实现的功能是显示8条基色色带
2006/10/09 PHP
PHP 无限分类三种方式 非函数的递归调用!
2011/08/26 PHP
php的XML文件解释类应用实例
2014/09/22 PHP
php ZipArchive实现多文件打包下载实例
2019/10/31 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
javascript 星级评分效果(手写)
2012/12/24 Javascript
javascript强大的日期函数代码分享
2013/09/04 Javascript
浅谈利用JavaScript进行的DDoS攻击原理与防御
2015/06/04 Javascript
angularjs数组判断是否含有某个元素的实例
2018/02/27 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
2018/04/10 Javascript
axios简单实现小程序延时loading指示
2018/07/30 Javascript
javascript canvas检测小球碰撞
2020/04/17 Javascript
[05:15]DOTA2英雄梦之声_第16期_灰烬之灵
2014/06/21 DOTA
Python使用Paramiko模块编写脚本进行远程服务器操作
2016/05/05 Python
python 基础教程之Map使用方法
2017/01/17 Python
Python利用QQ邮箱发送邮件的实现方法(分享)
2017/06/09 Python
python Matplotlib画图之调整字体大小的示例
2017/11/20 Python
python将每个单词按空格分开并保存到文件中
2018/03/19 Python
python在文本开头插入一行的实例
2018/05/02 Python
Python 用matplotlib画以时间日期为x轴的图像
2019/08/06 Python
Python编写打字训练小程序
2019/09/26 Python
TensorFlow实现checkpoint文件转换为pb文件
2020/02/10 Python
Python自定义聚合函数merge与transform区别详解
2020/05/26 Python
pytorch随机采样操作SubsetRandomSampler()
2020/07/07 Python
浅析Python模块之间的相互引用问题
2021/02/26 Python
CSS3之背景尺寸Background-size使用介绍
2013/10/14 HTML / CSS
database面试题
2013/03/28 面试题
linux面试题参考答案(4)
2014/09/21 面试题
体育学院毕业生自荐信
2013/11/03 职场文书
汉语言文学毕业生自荐信范文
2014/03/24 职场文书
美术第二课堂活动总结
2014/07/08 职场文书
综合素质自我评价怎么写
2014/09/14 职场文书
护士年终考核评语
2014/12/31 职场文书
庆七一主持词
2015/06/29 职场文书
教你在 Java 中实现 Dijkstra 最短路算法的方法
2022/04/08 Java/Android
JavaScript中reduce()的用法
2022/05/11 Javascript