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 相关文章推荐
967 个函式
Oct 09 PHP
PHP中的extract的作用分析
Apr 09 PHP
php通过COM类调用组件的实现代码
Jan 11 PHP
PHP对象Object的概念 介绍
Jun 14 PHP
php IP转换整形(ip2long)的详解
Jun 06 PHP
深入PHP数据加密详解
Jun 18 PHP
php检测iis环境是否支持htaccess的方法
Feb 18 PHP
YII路径的用法总结
Jul 09 PHP
php实现将Session写入数据库
Jul 26 PHP
php用户注册信息验证正则表达式
Nov 12 PHP
利用php_imagick实现复古效果的方法
Oct 18 PHP
PHP实现用户登录的案例代码
May 10 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中的Memcache详解
2014/04/05 PHP
JS 继承实例分析
2008/11/04 Javascript
JavaScript 继承的实现
2009/07/09 Javascript
Jquery 插件开发笔记整理
2011/01/17 Javascript
原生Javascript封装的一个AJAX函数分享
2014/10/11 Javascript
JavaScript字符串对象replace方法实例(用于字符串替换或正则替换)
2014/10/16 Javascript
js实现滑动触屏事件监听的方法
2015/05/05 Javascript
详解AngularJS中的表达式使用
2015/06/16 Javascript
jquery实现从数组移除指定的值
2015/06/24 Javascript
设置jQueryUI DatePicker默认语言为中文
2016/06/04 Javascript
浅析Ajax语法
2016/12/05 Javascript
详解js前端代码异常监控
2017/01/11 Javascript
实现微信小程序的wxml文件和wxss文件在webstrom的支持
2017/06/12 Javascript
JavaScript常用数学函数用法示例
2018/05/14 Javascript
关于vue3默认把所有onSomething当作v-on事件绑定的思考
2020/05/15 Javascript
详解vite2.0配置学习(typescript版本)
2021/02/25 Javascript
利用Django框架中select_related和prefetch_related函数对数据库查询优化
2015/04/01 Python
Python中的多重装饰器
2015/04/11 Python
Python内置函数OCT详解
2016/11/09 Python
numpy linalg模块的具体使用方法
2019/05/26 Python
python 批量添加的button 使用同一点击事件的方法
2019/07/17 Python
python线程的几种创建方式详解
2019/08/29 Python
python zip,lambda,map函数代码实例
2020/04/04 Python
html5本地存储之localstorage 、本地数据库、sessionStorage简单使用示例
2014/05/08 HTML / CSS
Free People中国官网:波西米亚风格女装服饰
2016/08/30 全球购物
linux面试题参考答案(8)
2015/08/11 面试题
Python中如何定义一个函数
2016/09/06 面试题
党组织公开承诺书
2014/03/29 职场文书
公司总经理任命书
2014/06/05 职场文书
日语系毕业求职信
2014/07/27 职场文书
六一儿童节活动总结
2014/08/27 职场文书
征用土地赔偿协议书
2014/09/26 职场文书
司机岗位职责
2015/02/04 职场文书
岗位聘任报告
2015/03/02 职场文书
《正比例》教学反思
2016/02/23 职场文书
诉讼和解协议书
2016/03/23 职场文书