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导出oracle库的php代码
Apr 20 PHP
PHP三层结构(上) 简单三层结构
Jul 04 PHP
php和数据库结合的一个简单的web实例 代码分析 (php初学者)
Jul 28 PHP
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
Oct 30 PHP
配置php.ini实现PHP文件上传功能
Nov 27 PHP
php随机生成数字字母组合的方法
Mar 18 PHP
php生成不重复随机数、数组的4种方法分享
Mar 30 PHP
php循环table实现一行两列显示的方法
Jun 04 PHP
PHP中Session可能会引起并发问题
Jun 26 PHP
PHP实现文件上传和多文件上传
Dec 24 PHP
PHP简单实现文本计数器的方法
Apr 28 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 file_get_contents设置超时处理方法
2013/09/30 PHP
显示youtube视频缩略图和Vimeo视频缩略图代码分享
2014/02/13 PHP
php获取远程文件内容的函数
2015/11/02 PHP
PHP5.6读写excel表格文件操作示例
2019/02/26 PHP
PHP小程序支付功能完整版【基于thinkPHP】
2019/03/26 PHP
Laravel5.7 数据库操作迁移的实现方法
2019/04/12 PHP
LBS blog sql注射漏洞[All version]-官方已有补丁
2007/08/26 Javascript
Mootools 1.2教程 滑动效果(Slide)
2009/09/15 Javascript
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
2010/05/18 Javascript
JavaScript之HTMLCollection接口代码
2011/04/27 Javascript
关于query Javascript CSS Selector engine
2013/04/12 Javascript
jquery 将当前时间转换成yyyymmdd格式的实现方法
2016/06/01 Javascript
使用伪命名空间封装保护独自创建的对象方法
2016/08/04 Javascript
node+experss实现爬取电影天堂爬虫
2016/11/20 Javascript
JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
2017/01/05 Javascript
浅谈JavaScript中promise的使用
2017/01/11 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
vue2.0 + ele的循环表单及验证字段方法
2018/09/18 Javascript
详解超简单的react服务器渲染(ssr)入坑指南
2019/02/28 Javascript
微信提示 在浏览器打开 效果实现过程解析
2019/09/10 Javascript
JS实现可以用键盘方向键控制的动画
2020/12/11 Javascript
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
Python 内置函数memoryview(obj)的具体用法
2017/11/23 Python
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
Python基于百度AI的文字识别的示例
2018/04/21 Python
Pycharm小白级简单使用教程
2020/01/08 Python
在IE6系列等老式浏览器中使用HTML5的新标签实现方案
2012/12/25 HTML / CSS
Furla官网:意大利著名的皮革品牌
2019/08/06 全球购物
DBA的职责都有哪些
2012/05/16 面试题
应届生财务会计求职信
2013/11/05 职场文书
求职毕业生自荐书
2014/02/08 职场文书
借款担保书范文
2014/05/13 职场文书
2014乡党委副书记党建工作汇报材料
2014/11/02 职场文书
电工实训报告总结
2014/11/05 职场文书
同事离别感言
2015/08/04 职场文书
这样写python注释让代码更加的优雅
2021/06/02 Python