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 相关文章推荐
第六节--访问属性和方法
Nov 16 PHP
PHP加速 eAccelerator配置和使用指南
Jun 05 PHP
php cookie的操作实现代码(登录)
Dec 29 PHP
超小PHP小马小结(方便查找后门的朋友)
May 05 PHP
关于PHP的相似度计算函数:levenshtein的使用介绍
Apr 15 PHP
php中文字符串截取方法实例总结
Sep 30 PHP
php+xml实现在线英文词典查询的方法
Jan 23 PHP
PHP中的traits实现代码复用使用实例
May 13 PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 PHP
php和nginx交互实例讲解
Sep 24 PHP
PHP实现15位身份证号转18位的方法分析
Oct 16 PHP
PHP正则表达式函数preg_replace用法实例分析
Jun 04 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
手冲咖啡应该是现代精品咖啡店的必备选项吗?
2021/03/03 冲泡冲煮
基于session_unset与session_destroy的区别详解
2013/06/03 PHP
php缩小png图片不损失透明色的解决方法
2013/12/25 PHP
thinkphp3.2.2前后台公用类架构问题分析
2014/11/25 PHP
laravel安装zend opcache加速器教程
2015/03/02 PHP
刷新PHP缓冲区为你的站点加速
2015/10/10 PHP
详解phpstorm2020最新破解方法
2020/09/17 PHP
一些mootools的学习资源
2010/02/07 Javascript
在网站上应该用的30个jQuery插件整理
2011/11/03 Javascript
node.js中的fs.lstat方法使用说明
2014/12/16 Javascript
详细解读JavaScript的跨浏览器事件处理
2015/08/12 Javascript
Three.js学习之正交投影照相机
2016/08/01 Javascript
Vue.js组件tabs实现选项卡切换效果
2016/12/01 Javascript
Js利用prototype自定义数组方法示例
2017/10/20 Javascript
element-ui tooltip修改背景颜色和箭头颜色的实现
2019/12/16 Javascript
[01:19:46]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第一场 2月28日
2021/03/11 DOTA
python实现用户管理系统
2018/01/10 Python
python 美化输出信息的实例
2018/10/15 Python
python实现Excel文件转换为TXT文件
2019/04/28 Python
python队列Queue的详解
2019/05/10 Python
浅谈Pytorch中的torch.gather函数的含义
2019/08/18 Python
Django单元测试中Fixtures用法详解
2020/02/25 Python
Python %r和%s区别代码实例解析
2020/04/03 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
python单元测试框架pytest的使用示例
2020/10/07 Python
英国网上购买门:Direct Doors
2018/06/07 全球购物
有个性的自我评价范文
2013/11/15 职场文书
简单英文演讲稿
2014/01/01 职场文书
《明天,我们毕业》教学反思
2014/04/24 职场文书
祖国在我心中演讲稿500字
2014/05/04 职场文书
学习焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
个人股份合作协议书
2014/10/24 职场文书
2014年社区宣传工作总结
2014/12/02 职场文书
党风廉政建设心得体会(2016最新版)
2016/01/22 职场文书
python 实现德洛内三角剖分的操作
2021/04/22 Python
Java界面编程实现界面跳转
2022/06/16 Java/Android