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 相关文章推荐
PHP一些常用的正则表达式字符的一些转换
Jul 29 PHP
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
Jun 11 PHP
Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
Jul 23 PHP
关于js与php互相传值的介绍
Jun 25 PHP
smarty模板中拼接字符串的方法
Feb 14 PHP
关于URL最大长度限制的相关资料查证
Dec 23 PHP
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
Oct 10 PHP
PHP开发制作一个简单的活动日程表Calendar
Jun 20 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
Apr 18 PHP
ThinkPHP 3.2.3实现页面静态化功能的方法详解
Aug 03 PHP
php实现微信支付之现金红包
May 30 PHP
laravel 根据不同组织加载不同视图的实现
Oct 14 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中一个完整表单处理实现代码
2011/11/10 PHP
php自动给文章加关键词链接的函数代码
2012/11/29 PHP
PHP遍历文件夹与文件类及处理类用法实例
2014/09/23 PHP
php静态文件生成类实例分析
2015/01/03 PHP
Java和PHP在Web开发方面对比分析
2015/03/01 PHP
PHP+JQUERY操作JSON实例
2017/03/23 PHP
Laravel中服务提供者和门面模式的入门介绍
2017/11/06 PHP
IE6/7/8中Option元素未设value时Select将获取空字符串
2011/04/07 Javascript
在新窗口打开超链接的方法小结
2013/04/14 Javascript
基于jquery的文章中所有图片width大小批量设置方法
2013/08/01 Javascript
jquery中常用的函数和属性详细解析
2014/03/07 Javascript
举例讲解Node.js中的Writable对象
2015/07/29 Javascript
关于javascript中dataset的问题小结
2015/11/16 Javascript
JavaScript从数组的indexOf()深入之Object的Property机制
2016/05/11 Javascript
javascript表单控件实例讲解
2016/09/13 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
2016/10/30 Javascript
AngularJS全局scope与Isolate scope通信用法示例
2016/11/22 Javascript
详解Angular-Cli中引用第三方库
2017/05/21 Javascript
详解nodejs微信jssdk后端接口
2017/05/25 NodeJs
史上最全JavaScript常用的简写技巧(推荐)
2017/08/17 Javascript
AngularJS 的$timeout服务示例代码
2017/09/21 Javascript
解决layui中的form表单与button的点击事件冲突问题
2018/08/15 Javascript
JS实现百度搜索框关键字推荐
2020/02/17 Javascript
Python实现简单登录验证
2016/04/13 Python
Python实现读取Properties配置文件的方法
2018/03/29 Python
python实现二维数组的对角线遍历
2019/03/02 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
2019/09/25 Python
Python数据结构dict常用操作代码实例
2020/03/12 Python
Python logging模块进行封装实现原理解析
2020/08/07 Python
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
物流管理应届生求职信
2013/11/07 职场文书
怀念母亲教学反思
2014/04/28 职场文书
校园广播稿100字
2014/10/06 职场文书
教师继续教育反思周记
2015/06/25 职场文书
导游词之山东孔庙
2019/11/04 职场文书
在Spring-Boot中如何使用@Value注解注入集合类
2021/08/02 Java/Android