当前位置: 首页 > news >正文

PHP非对称与对称双向加密解密的方式

目录

RSA非对称加密解密:

什么是RSA非对称加密解密解析:

解析:

为什么使用:

有什么优点:

DEMO:

AES、DES、3DES等对称加密解密:

解析:

为什么使用:

有什么优点:

DEMO:


RSA非对称加密解密:

什么是RSA非对称加密解密解析:

解析:

RSA非对称加密解密算法是一种广泛应用于信息安全领域的加密算法。它不同于常规的对称加密,如相同的密钥用于加密和解密,而是使用一对不同的密钥,即公钥和私钥,进行加密和解密的过程。

在RSA加密算法中,甲方首先生成一对密钥,并将其中的一个作为公钥公开给其他方;得到公钥的乙方则使用该公钥对机密信息进行加密后发送给甲方;最后,甲方用自己的另一个专用密钥,即私钥,对接收到的加密信息进行解密。

值得一提的是,RSA加密算法的加密原理基于一个非常简单但有深远影响的数论事实:两个大质数相乘易事,但一个大数分解为两个质数的乘积却困难重重。这就使得RSA算法具有极高的安全性,极其难以被破解。

然而,虽然RSA算法的安全性极高,但其实施过程中可能会面临一些问题,例如密钥配送问题。这是因为在确定下来的密钥如何让双方都知道的过程中,密钥本身也是信息,其传输过程也可能被拦截和窃取。因此,解决密钥配送问题对于确保RSA算法的安全性至关重要。

为什么使用:

RSA非对称加密解密算法在信息安全领域得到广泛应用,其最主要的优点在于安全性极高。与常规的对称加密不同,如相同的密钥用于加密和解密,RSA算法使用的是一对不同的密钥,即公钥和私钥,进行加密和解密的过程。公钥是公开的,私钥是自己保存的,无需将私钥给别人。

然而,RSA算法也存在一些缺点。首要的一点就是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。此外,RSA算法的加密长度为2048位,因此对于服务端的消耗是比较大的,所以计算的速度也会比较慢,效率相对较低。

总的来说,虽然RSA算法的安全性和兼容性都很强,但是由于其加密解密效率较低,所以在实际应用中通常结合其他加密方法一起使用,例如:针对C/S模型,服务端计算出一对秘钥pub/pri。将私钥保密,将公钥公开。客户端请求服务端时,拿到服务端的公钥pub。客户端通过AES计算出一个对称加密的秘钥X。然后使用pub将X进行加密。客户端将加密后的密文发送给服务端。

有什么优点:

1.RSA非对称加密解密算法的优点主要体现在其高度的安全性上。首先,该算法的运作原理基于一个深奥的数论事实:将两个大素数相乘很容易,但反之却极其困难。因此,只要这两个素数的秘密被妥善保管,用它们加密的信息就能得到有效保护。

2.RSA算法的一个显著特点是它使用两把不同的密钥,公钥和私钥。公钥可以公开,而私钥则需要保密保存,无需将其提供给他人。这一特性使得RSA在许多场合变得非常有用,特别是在需要通过网络传输密钥的情况下。由于不需要在网络中传输密钥,因此可以避免密钥在传输过程中被窃取或篡改的风险。

3.尽管RSA算法具有很高的安全性,但它也存在一些缺点。比如,RSA算法的加解密过程可能会花费较长的时间,因此它更适合对少量数据进行加密。此外,RSA算法的效率相对较低,因此在处理大量数据时可能不太适用。为了解决这个问题,实际应用中常常会结合其他加密方式,如AES等进行混合使用。例如在C/S模型中,服务端计算出一对秘钥pub/pri,将私钥保密,将公钥公开。客户端请求服务端时,拿到服务端的公钥pub,通过AES计算出一个对称加密的秘钥X,然后使用pub将X进行加密,最后将加密后的密文发送给服务端。

DEMO:
<?php
// 生成密钥对
$keyPair = openssl_pkey_new(array("private_key_bits" => 2048,"private_key_type" => OPENSSL_KEYTYPE_RSA,
));// 获取私钥和公钥
openssl_pkey_export($keyPair, $privateKey);
$publicKey = openssl_pkey_get_details($keyPair)["key"];// 要加密的数据
$data = "Hello, World!";// 使用公钥进行加密
$encryptedData = '';
openssl_public_encrypt($data, $encryptedData, $publicKey, OPENSSL_PKCS1_OAEP_PADDING);
echo "Encrypted data: " . base64_encode($encryptedData) . PHP_EOL;// 使用私钥进行解密
$decryptedData = '';
openssl_private_decrypt($encryptedData, $decryptedData, $privateKey, OPENSSL_PKCS1_OAEP_PADDING);
echo "Decrypted data: " . $decryptedData . PHP_EOL;
?>
 

在这个示例中,我们首先生成了一个RSA密钥对,然后使用公钥对数据进行了加密,最后使用私钥对数据进行了解密。注意,由于RSA算法的特性,加密和解密的过程可能会花费一些时间。

AES、DES、3DES等对称加密解密:

解析:

AES、DES、3DES都是对称加密算法,也就是说加密和解密使用的是同一个密钥。

DES(Data Encryption Standard)是一种使用密钥进行加密的块算法,出自IBM的研究,后来被美国政府正式采用并开始广泛流传。然而,现在普遍认为DES由于其56位密钥长度较短,安全性不足,已经可以在短时间内被破解,因此现在使用越来越少。

3DES(Triple DES),也称TDES,是DES的加强版本,为了解决DES安全性不足的问题而出现。它使用3条56位的密钥对数据进行三次加密,使得即使攻击者拥有大量的计算资源,也难以破解。

AES(Advanced Encryption Standard)则是目前最流行的对称加密算法之一,它的密钥长度比DES更长,因此更安全。AES算法的出现正是为了取代DES。

在对称加密中,发信方将明文和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。

为什么使用:

对称加密算法,如AES、DES和3DES等,被广泛使用是因为它们提供了一种高效且可靠的方法来保护数据的机密性。这些算法通过使用相同的密钥进行加密和解密操作,使得加解密过程变得相对简单快速。

然而,这些算法的安全性各不相同。例如,DES是一种早期的对称加密算法,其密钥长度为56位,虽然加密速度较快,但由于其安全性较低,易受到暴力破解和差分攻击等攻击手段的攻击,因此现在使用越来越少。 为了提高安全性,出现了3DES,也称Triple DES,这是DES向AES过渡的加密算法,它使用3条56位的密钥对数据进行三次加密,从而大大提高了加密的强度。

再进一步,AES(高级加密标准)是目前最流行的对称加密算法之一,它的密钥长度为128位或256位,安全性比DES和3DES更高。 AES算法的出现正是为了取代安全性较低的DES。 因此,在需要高度安全的场合,通常会选择使用AES等高安全性的对称加密算法来保护数据的机密性。

有什么优点:
  • 加密速度快:相对于非对称加密算法,对称加密算法由于只需要一个密钥进行加解密操作,所以其加密速度通常更快,适合加密大文件。

  • 安全性较高:虽然早期的DES算法由于密钥长度较短,易受到暴力破解和差分攻击等攻击手段的攻击,但是通过将其发展为3DES(Triple DES),也就是使用3条56位的密钥对数据进行三次加密,安全性得到了极大的提高。而目前最流行的AES(高级加密标准)的密钥长度为128位或256位,安全性更高。

  • 可逆性:对称加密算法的另一个特点是密文可逆,即可以通过同一个密钥进行解密操作,从而获取原始明文。

DEMO:
<?php
// 定义密钥和明文
$key = '0123456789abcdef'; // 密钥长度为16字节(128位)
$plaintext = 'Hello, world!'; // 明文// 创建加密器对象,并指定加密模式为ECB模式
$cipher = "aes-128-ecb";
$ivlen = openssl_cipher_iv_length($cipher);
$iv = openssl_random_pseudo_bytes($ivlen);
$ciphertext = openssl_encrypt($plaintext, $cipher, $key, OPENSSL_RAW_DATA, $iv);
echo "密文:".bin2hex($ciphertext)."\n";// 创建解密器对象,并指定加密模式为ECB模式
$decipher = "aes-128-ecb";
$decrypted_text = openssl_decrypt($ciphertext, $decipher, $key, OPENSSL_RAW_DATA, $iv);
echo "解密后的明文:".$decrypted_text."\n";
?>

在这个示例中,我们首先定义了一个密钥和一个明文,然后使用AES算法对其进行了加密和解密操作.

相关文章:

PHP非对称与对称双向加密解密的方式

目录 RSA非对称加密解密&#xff1a; 什么是RSA非对称加密解密解析: 解析: 为什么使用: 有什么优点: DEMO: AES、DES、3DES等对称加密解密: 解析: 为什么使用: 有什么优点: DEMO: RSA非对称加密解密&#xff1a; 什么是RSA非对称加密解密解析: 解析: RSA非对称加密…...

C++之struct匿名结构体实例(二百四十四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…...

npm publish发布到在线仓库时,提示:Scope not found

当npm publish发布时&#xff0c;控制台提示&#xff1a;Scope not found&#xff0c;具体错误信息如下&#xff1a; npm notice npm ERR! code E404 npm ERR! 404 Not Found - PUT https://registry.npmjs.org/xxx%2fxxx - Scope not found npm ERR! 404 npm ERR! 404 xxx/xx…...

AWS Lambda 操作 RDS 示例

实现目标 创建一个 Lambda 接收调用时传入的数据, 写入 RDS 数据库 Post 表存储文章信息. 表结构如下: idtitlecontentcreate_date1我是标题我是正文内容2023-10-21 15:20:00 AWS 资源准备 RDS 控制台创建 MySQL 实例, 不允许 Public access (后面 Lambda 需要通过 VPC 访问…...

【java爬虫】使用selenium获取某交易所公司半年报数据

引言 上市公司的财报数据一般都会进行公开&#xff0c;我们可以在某交易所的官方网站上查看这些数据&#xff0c;由于数据很多&#xff0c;如果只是手动收集的话可能会比较耗时耗力&#xff0c;我们可以采用爬虫的方法进行数据的获取。 本文就介绍采用selenium框架进行公司财…...

MATLAB - 不能使用PYTHON,缺少matplotlib模块的解决办法

matlab缺少python-matplotlib模块的解决办法 1. 前言、概述2. 解决办法3. 可能出现问题4. 结果 1. 前言、概述 起因是我用习惯的colormap函数getPyPlot_cMap不能用了&#xff1a;【这个函数要调用PYTHON】 报错的地方&#xff1a; ModuleNotFoundError: No module named ‘ma…...

mk语法示例

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…...

英语什么时候加s和es

名词变复数一般情况下加s&#xff0c;以s,x,ch,sh结尾加es。一个名词如果表示一个或一样东西&#xff0c;它取单数形式&#xff0c;如果表示两个或更多的这类东西&#xff0c;则需要用名词复数形式。 1 以s,x,sh,ch结尾的词&#xff0c;加es。 2 以辅音字母&#xff08;除a/e/…...

unity中方向的两种表示:欧拉角和四元数

欧拉角&#xff1a;简单来说就是你可以选择 0度~360度 的范围 四元数&#xff1a;在计算机图像学中&#xff0c;四元数用于物体的旋转&#xff0c;是一种复杂&#xff0c;但效率较高的旋转方式 Quaternion结构体代表一个四元数&#xff0c;包含一个标量和一个三维向量&#x…...

ViT-L-14.pt下载load checkpoint from xxx

load checkpoint from E:\BaiduNetdiskDownload\sd-webui-aki-v4\models\BLIP\model_base_caption_capfilt_large.pth stable diffusion反推提示词出现此提示时&#xff0c;需安装以下模型至sd-webui-aki-v4.cache\clip\目录 ViT-L-14.pt https://openaipublic.azureedge.net/…...

机械设备经营小程序商城的作用是什么

由于机械设备厂商品牌需要各地招商代理&#xff0c;因此在管理方面也需要工具进行高效管理。如今各个行业都在开展数字化转型解决行业所遇难题或通过线上销售解决传统三公里难题及品牌扩张难题、用户消费渠道少等难题&#xff0c;构建会员体系精细化管理&#xff0c;同时还需要…...

小程序跨页面传递参数的几种方式

当我们在开发小程序时&#xff0c;经常会遇到需要在不同页面之间传递数据的情况。为了实现页面间的数据传递&#xff0c;小程序提供了多种方法。下面将介绍几种常用的传递数据的方法。 URL参数传递&#xff1a;这是一种简单直接的传递数据的方式。在跳转页面时&#xff0c;可以…...

【算法与数据结构】--高级算法和数据结构--高级数据结构

一、堆和优先队列 堆&#xff08;Heap&#xff09;是一种特殊的树状数据结构&#xff0c;通常用于实现优先队列。堆有两种主要类型&#xff1a;最大堆和最小堆。最大堆是一棵树&#xff0c;其中每个父节点的值都大于或等于其子节点的值&#xff0c;而最小堆是一棵树&#xff0…...

小工具 - Python图片转PDF文件

前言 主要整理记载一些python实现的小脚本&#xff0c;网上基本转换要会员&#xff0c;懒得搞了&#xff0c;这个一键生成&#xff0c;可以打包成exe文件使用 单张图片转换成pdf、图片批量转换成pdf # coding UTF-8 import os from io import BytesIO from PIL import Imag…...

bitbucket.org 用法

这个网站需要魔法&#xff0c;注册完成后添加厂库时间2023.10 图1 图2 第二张图 &#xff0c;不要.gitignore文件 sourcetree 1,创建前端项目 npm create vitelatest 2.打开vscode创建本地Git 看到Git代提交的文件 sourcetree&#xff0c;新建 已存在的本地厂库 提交到Git 添…...

lodash常用方法合集

安装lodash 建议安装lodash-es&#xff0c;lodash-es 是 lodash 的 es modules 版本 &#xff0c;是着具备 ES6 模块化的版本&#xff0c;体积小。按需引入。 示例 npm i lodash-es import { chunk,compact } from lodash-es; /**按需引入*/ 1.chunk 数组分组 chunk(arra…...

Nginx平滑升级重定向rewrite

文章目录 Nginx平滑升级&重定向rewritenginx平滑升级流程环境查看旧版的配置信息下载新版nginx源码包和功能模块包编译配置新版本平滑升级验证 重定向rewrite配置重定向准发访问测试 Nginx平滑升级&重定向rewrite nginx平滑升级 流程 平滑升级: (升级版本、增加新功…...

Mysql基础与高级汇总

SQL语言分类 DDL:定义 DML&#xff1a;操作 DCL:控制(用于定义访问权限和安全级别) DQL:查询 Sql方言 ->sql&#xff1a;结构化查询语言 mysql:limit oracle:rownum sqlserver:top 但是存储过程&#xff1a;每一种数据库软件一样SQL语法要求: SQL语句可以单行或多行书写&…...

为什么避免在循环、条件或嵌套函数中调用 Hooks

为什么避免在循环、条件或嵌套函数中调用 Hooks 为了确保 Hook 在每一次渲染中都按照同样的顺序被调用。这让 React 能够在多次的 useState 和 useEffect 调用之间保持 hook 状态的正确。 我们可以在单个组件中使用多个 State Hook 或 Effect Hook&#xff1a; function Form…...

自然语言处理---Transformer机制详解之BERT模型特点

1 BERT的优点和缺点 1.1 BERT的优点 通过预训练, 加上Fine-tunning, 在11项NLP任务上取得最优结果.BERT的根基源于Transformer, 相比传统RNN更加高效, 可以并行化处理同时能捕捉长距离的语义和结构依赖.BERT采用了Transformer架构中的Encoder模块, 不仅仅获得了真正意义上的b…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...