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 相关文章推荐
超级简单的发送邮件程序
Oct 09 PHP
php生成文件
Jan 15 PHP
phpmyadmin 常用选项设置详解版
Mar 07 PHP
PHP性能优化准备篇图解PEAR安装
Dec 05 PHP
PHP中array_map与array_column之间的关系分析
Aug 19 PHP
PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
Sep 29 PHP
php支付宝接口用法分析
Jan 04 PHP
php上传中文文件名乱码问题处理方案
Feb 03 PHP
php中JSON的使用方法
Apr 30 PHP
PHP超牛逼无限极分类生成树方法
May 11 PHP
Yii中CGridView实现批量删除的方法
Dec 28 PHP
php源码之将图片转化为data/base64数据流实例详解
Nov 27 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 eval函数用法总结
2012/10/31 PHP
为百度UE编辑器上传图片添加水印功能
2015/04/16 PHP
Linux环境下php实现给网站截图的方法
2016/05/03 PHP
PHP实现字母数字混合验证码功能
2019/07/11 PHP
php post换行的方法
2020/02/03 PHP
js setTimeout 常见问题小结
2013/08/13 Javascript
学习使用AngularJS文件上传控件
2016/02/16 Javascript
Validform表单验证总结篇
2016/10/31 Javascript
js实现密码强度检验
2017/01/15 Javascript
js+html5实现页面可刷新的倒计时效果
2017/07/15 Javascript
强大的JavaScript响应式图表Chartist.js的使用
2017/09/13 Javascript
使用D3.js创建物流地图的示例代码
2018/01/27 Javascript
nodejs简单读写excel内容的方法示例
2018/03/16 NodeJs
vue2.0页面前进刷新回退不刷新的实现方法
2018/07/31 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
2019/11/12 Javascript
JavaScript实现电灯开关小案例
2020/03/30 Javascript
python网络爬虫采集联想词示例
2014/02/11 Python
python代码制作configure文件示例
2014/07/28 Python
python opencv实现运动检测
2018/07/10 Python
python中将正则过滤的内容输出写入到文件中的实例
2018/10/21 Python
python程序中的线程操作 concurrent模块使用详解
2019/09/23 Python
Python导入模块包原理及相关注意事项
2020/03/25 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
2020/05/26 Python
python Xpath语法的使用
2020/11/26 Python
Django 实现图片上传和下载功能
2020/12/31 Python
分享CSS3制作卡片式图片的方法
2016/07/08 HTML / CSS
英国领先的亚洲旅游专家:Wendy Wu Tours
2018/01/21 全球购物
亚洲独特体验旅游专家:eOasia
2018/08/15 全球购物
LivingSocial英国:英国本地优惠
2019/02/22 全球购物
毕业留言寄语大全
2014/04/10 职场文书
85句关于理想的名言警句大全
2019/08/22 职场文书
《妈妈别哭,有我在》读后感3篇
2020/01/13 职场文书
Python OpenCV实现图形检测示例详解
2022/04/08 Python
python前后端自定义分页器
2022/04/13 Python
MySQL安装失败的原因及解决步骤
2022/06/14 MySQL
使用pd.merge表连接出现多余行的问题解决
2022/06/16 Python