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 相关文章推荐
phpword插件导出word文件时中文乱码问题处理方案
Aug 19 PHP
PHP中ini_set与ini_get用法实例
Nov 04 PHP
php+mysql实现用户注册登陆的方法
Jan 03 PHP
初识laravel5
Mar 02 PHP
php返回字符串中所有单词的方法
Mar 09 PHP
PHP判断是否连接上网络的方法
Jul 01 PHP
部署PHP时的4个配置修改说明
Oct 19 PHP
php实现的一段简单概率相关代码
May 30 PHP
PHP设计模式之注册树模式分析
Jan 26 PHP
php 可变函数使用小结
Jun 12 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
Oct 03 PHP
PHP7创建销毁session的实例方法
Feb 03 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基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
2014/07/11 PHP
Thinkphp 框架扩展之数据库驱动常用方法小结
2020/04/23 PHP
网页里控制图片大小的相关代码
2006/06/13 Javascript
java script编程起步(第三课)
2007/01/10 Javascript
详解Vue.js 2.0 如何使用axios
2017/04/21 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
2017/04/25 Javascript
Node.js学习之地址解析模块URL的使用详解
2017/09/28 Javascript
JQuery选中select组件被选中的值方法
2018/03/08 jQuery
用vue写一个仿简书的轮播图的示例代码
2018/03/13 Javascript
vue iview组件表格 render函数的使用方法详解
2018/03/15 Javascript
nodejs连接mysql数据库及基本知识点详解
2018/03/20 NodeJs
深入解析Vue源码实例挂载与编译流程实现思路详解
2019/05/05 Javascript
Node.JS在命令行中检查Chrome浏览器是否安装并打开指定网址
2019/05/21 Javascript
JavaScript实现点击图片换背景
2020/11/20 Javascript
[40:48]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第二局
2016/02/28 DOTA
python判断端口是否打开的实现代码
2013/02/10 Python
python连接MySQL、MongoDB、Redis、memcache等数据库的方法
2013/11/15 Python
python操作gmail实例
2015/01/14 Python
PyQt5图形界面播放音乐的实例
2019/06/17 Python
利用python求积分的实例
2019/07/03 Python
Python学习之os模块及用法
2020/06/03 Python
安装python3.7编译器后如何正确安装opnecv的方法详解
2020/06/16 Python
python如何变换环境
2020/07/21 Python
HTML5基于flash实现播放RTMP协议视频的示例代码
2020/12/04 HTML / CSS
请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
2015/07/16 面试题
Linux管理员面试经常问道的相关命令
2014/12/12 面试题
Boolean b = new Boolean(“abcde”); 会编译错误码
2013/11/27 面试题
人力资源经理的岗位职责范本
2014/02/28 职场文书
中职毕业生自我鉴定
2014/09/13 职场文书
2014年药房工作总结
2014/11/22 职场文书
宾馆卫生管理制度
2015/08/06 职场文书
患者身份识别制度
2015/08/06 职场文书
高一语文教学反思
2016/02/16 职场文书
简历上的自我评价,该怎么写呢?
2019/06/13 职场文书
Go标准容器之Ring的使用说明
2021/05/05 Golang
详解Python flask的前后端交互
2022/03/31 Python