百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

使用php实现简单的对称加密和解密过程

haoteby 2025-02-04 14:08 3 浏览

作者:极客小俊
把逻辑思维转变为代码的技术博主


为什么我们要加密?

加密是为了信息传递更加安全!

这样才能更好的让信息传递更具有保密性,不会被他人随意篡改、也能够让信息真实有效的到达指定对象的手里!

我们加密的目的,多数是围绕这上面这些情况来的!

举个栗子

在信息通信过程当中,比如你发送一条重要信息给对方, 在这个过程中其实有很多人可以利用一些技术手段接触到这一段信息! 如果是很重要的信息但个别人利用,说不一定就会产生严重的经济损失!

例如: 信息中包含了一些敏感信息,如身份证、银行卡、密码、而这些敏感信息是最容易被人偷窥的!

如图

为了避免出现以上的情况,我们就要将信息进行加密处理, 这样子即便是被人拿到了关键信息,他也是在短时间内无法查看的,也就是让任何第三方都无法直接读取和读懂的信息!

只有发送方接收方能看懂整个数据传输的信息。

加密系统的简单架构

加密的产生过程,简单点说其实就是: 明文+密钥+算法=密文

如图

从上面的图来看,其实明文算法都还是比较好理解,但其中有一个叫密钥的东西,它就好比是像彼此约定好了的暗号一样, 也是最简单的加密方式!

举个栗子

从生活中我们用一个锁家里的门来举例的话,就是家中有价值的物品,就是你的明文、那么密钥就是你的钥匙,那么算法就是你是通过什么样的情况来锁门的! 当门锁好之后,那么一个就形成了一个加密状态了!

所以这个密钥通常都是需要保密的,就是这个意思,你总不可能把你的钥匙随便丢吧!

对称加密

那么在计算机中,我们也一些有比较安全和常见的加密方式, 例如:对称加密

对称加密其实分为两种形式: 对称加密非对称加密

简单的说对称加密也就是加密解密都会使用同样密钥

非对称加密则恰恰相反,这种加密解密使用的是不同密钥

AES对称加密算法

AES全称:advanced encryption standard 它是密码学中的高级加密标准,也是美国联邦政府采用的区块加密的标准,也是当下比较流行的对称密码算法!

我们前面提到的对称加密中就包含了AES 也就是加密解密都会使用同样密钥加密算法

简单的说发送方明文密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文再发送出去!

接收方如果想解读明文, 那么需要使用加密用过的密钥相同算法然后按照与加密时相反的顺序逆推算法对密文进行解密,才能使其恢复成可读的明文信息!

前面说了,在对称AES加密算法中,使用的密钥只有一个, 发送方接收方都使用这个密钥对数据进行加密解密,那么这就要求解密的一方事先必须知道加密密钥对吧!

如图

这就像是它要求发送方接收方在通信之前,约定一个密钥(暗号)

对称算法的安全性依赖于密钥,如果泄漏密钥就意味着任何人都可以对他们发送接收的数据进行解密

所以密钥的保密性对AES通信的安全性至关重要!

对称加密算法的优点在于加密和解密快速和使用长密钥时的难破解性,而这种加密算法支持长度为 128比特的密钥长度, 同时也支持192、256比特一共三种选择!

我们知道加密的核心在于密钥算法本身其实最终都会被破解的,所以现在流行的密码算法都是公开的,所以从密码学的角度而言也没有人去保密算法来提高安全性,所以说对于现在某些密码攻击手段对于一些高级加密标准算法本身并没有效果,真正核心的还是密钥, 这里密钥的长度直接就会影响到蛮力攻击要取得成功需要耗费相当长的时间,而这种对称加密算法安全性取决于密钥的保存情况来决定!

所以普通情况下,没有特殊需求,基本上首先的是AES加密

应用场景

这里我简单说一个案例

假设我们现在有一个包含用户个人信息的JSON对象,需要进行加密处理

如下

{  
  "name": "张三",  
  "age": 30,  
  "email": "zhangsan@example.com",  
  "phone": "13812345678"  
}

那么此时我们可以使用一些加密算法,比如:AES、RSA 对这个JSON对象中的一些数据进行加密处理。

然后加密之后的数据会变成一串密文,用户是无法直接阅读和理解。

例如:使用AES算法加密上述JSON对象,结果可能类似于以下形式:

{  
  "name": "张三",  
  "age": 30,  
  "email": "zhangsan@example.com",  
  "phone": "tv/yxsWlDIPHOnD50WVnFw=="  
}

现在可以看到,加密后的JSON对象中的phone电话字段已经被替换为一串看似随机的字符串,我们是无法直接读取原始的手机号的, 这样也对整个JSON对象也变得难以理解和解析。

这里加密后的JSON数据需要解密后才能还原为原始数据,而解密过程加密相反

需要使用相应的解密算法密钥来还原数据。

PHP实现AES对称加密

我们来实现一个简单的加密案例,有兴趣的朋友可以来看看,java、php、python等等用什么语言都可以!

我用php中的OpenSSl扩展库来实现AES对称加密与解密

不用我们去了解底层,只需要轻松几步就可以实现一个简单加密和解密数据的过程!

代码如下

';

// 解密数据  
$decryptedData = decryptAES($encryptedData, $key, $iv);  
echo '解密后的数据:' . $decryptedData;  
  
?>

效果如下

代码分析

这里简单的使用到了phpOpenSSl扩展库openssl_encryptopenssl_decrypt函数来实现的AES

openssl_encrypt函数解释

如下表

参数列表

含义

参数1:data

待加密的明文信息数据, 也就是需要加密的数据,你可以把它想象成你想要锁起来的秘密信息

参数2:method

加密方式, 也就是你想要用来加密数据加密算法, 常见的加密算法包括 AES, 具体可以查看官方文档 例如: 你使用 AES-256-CBC 算法,那么 CBC 表示加密模式256 表示密钥的长度

参数3:key

约定加密和解密的一把钥匙, 而这把密钥的长度必须与所选择的加密算法相匹配.........例如,如果使用 AES-256-xxx,那么你的密钥应该是 256位长! 所以我们最好要给定相应字节长度的字符串密钥,虽然有时候我们没有定义指定长度的字符的密钥,但仍然能够成功加密数据,是因为PHPOpenSSL扩展自动处理了密钥的填充和生成! 但是为了确保最佳的安全性,最好显式地指定一个符合长度要求的密钥! 这样可以避免任何潜在的填充问题,并确保密钥的长度与所选加密算法的要求相匹配, 比如说: 在 AES-256 算法中,密钥的长度为 32字节(256 位)的字符串就可以了! 这里我采用的是AES,而AES密钥的长度通常可以是128位、192位、256位

参数4:options

它可以控制如何处理返回的数据, 它有两种常量设置方式: OPENSSL_RAW_DATAOPENSSL_ZERO_PADDING 例如,你可以设置 OPENSSL_RAW_DATA 常量选项,这样函数会返回原始的二进制数据,一把也都设置这个!

参数5:iv

它是一个初始化向量, 用于增加加密安全性随机性! 这里所谓的初始化向量其实就是一个随机字符串,但是这个随机字符串是有一定讲究的,它的字符长度通常需要与加密模式的要求相匹配, 也就是说不同的加密模式可能会有不同的iv要求, 例如: 当我们使用AES-256-CBC加密模式时,iv参数应该至少为16字节长度的随机字符串, 如果使用AES-128-CBC加密模式时, iv参数必须为16字节长度的随机字符串,多一个或少一个都会报错! 所以iv这个参数,最好是要和加密模式中的长度一致就行了! 为了更加安全,这个iv最好不能写死,用一种算法方式生成指定长度的iv 这样子在每次加密操作时都会改变加密结果!



....................................


返回值:成功时返回加密后的字符串

openssl_decrypt函数解释

如下表

参数列表

描述

参数1:data

要解密的数据字符串,通常是由 openssl_encrypt 函数加密后的结果。

参数2:method

填写加密方式,既然要解密那么就要知道是如何加密的,所以这里就必须填写与加密时使用的算法模式相同! 例如: 加密模式AES-256-CBC 那么这里就必须填写AES-256-CBC

参数3:key

解密密钥。这是用于解密的密钥,与加密时使用的密钥相同! 举个生活上的案例,你用什么钥匙锁门,那么你就要用相应的钥匙来开门,对吧! 并且这个密钥的长度也要一致!

参数4:options

数据以什么形式进行处理并返回 它有两种常量设置方式: OPENSSL_RAW_DATAOPENSSL_ZERO_PADDING , 加密时设置的什么,这里就设置什么!

参数5:iv

解密时需要使用加密时相同的 iv



.........................................


所以在上面的案例中encryptAES函数接受要加密的数据、密钥初始向量,并返回加密后的结果。

而且decryptAES函数接受加密后的数据、密钥初始向量,并返回解密后的原始数据。

特别注意的是密钥初始向量的长度,必须要符合加密算法的要求!

大致流程如下图:

小结

看到这里你也应该大致了解了一下对称加密了吧, 其实关于对称加密还有很多有趣的内容,以后可以慢慢给跟大家分享!


大家的支持就是我坚持的动力!

如果文章对你有帮助的话就请

点赞 ??评论 收藏

一键三连哦!

如果以上内容有任何错误或者不准确的地方,欢迎在下面 留个言指出!

或者你有更好的想法,欢迎一起交流学习??

相关推荐

手机如何检测是否被安装木马程序?如何防止路由器被黑客重置?

黑客攻击无线路由器有3种途径:...

盈盈可握的娇媚——全能美物ORICO WRE-30

由于工作的关系经常出差,在酒店除了一个RJ45接头,通常都没有无线网络可以提供,不可能自己携带太大的无线路由器,便携式的也买过几个,但是功能上大打折扣实在无法忍受,一直期盼能有既便携也功能丰富强大的产...

安卓重大锁屏密码漏洞,国产手机有几个中招了?

上周,一条新闻吸引了托尼注意。只用一张SIM卡,1分钟不到就能解锁你的安卓手机?...

零代码+免费+联网搜索:用DeepSeek+AnythingLLM搭建专属AI知识库

引言在信息爆炸的时代,如何高效管理私有数据并借助AI能力实现精准问答?本地私有知识库成为解决数据安全与智能化的最佳方案。本文将手把手教你使用开源工具AnythingLLM(项目地址:...

iOS越狱更轻松?黑客破解Lightning连接器

IT之家(www.ithome.com):iOS越狱更轻松?黑客破解Lightning连接器近日,德国黑客StefanEsser,也就是人们熟知的i0n1c在他Twitter上表示,黑客已成功破解了...

如何在 Windows 11 中更改 PIN

#寻找数码点评派#打开Windows设置,转到帐户登录选项,然后选择PIN(WindowsHello)...

2019年终黑客工具盘点-最佳篇

2019已经匆匆溜走,在2020伊始,小兮为大家带来了2019年终工具盘点的最佳篇,将分成三个部分为大家推荐工具,分别是Windows最佳工具、Linux最佳工具和手机最佳工具。话不多说,开整!Win...

磁盘被 BitLocker 锁住了怎么办?教你轻松解决

如果你的磁盘被BitLocker锁住,通常是因为系统检测到潜在的安全风险(如硬件改动、多次密码错误等)或丢失了密钥。以下是分步解决方案:一、确认被锁原因①硬件改动:更换主板、TPM芯片或启动顺序变化可...

风靡全球的安全应用AppLock,同样可能泄露隐私

安全研究人员发现,DoMobileLtd.公司开发的知名的安卓安全应用AppLock存在多个漏洞,容易受到黑客攻击。AppLock应用锁简介AppLock在超过50个国家拥有1亿多用户,它自身支持2...

安卓5.1.1前所有版本曝密码漏洞,轻松乱码即可破解锁屏

据德州大学研究人员发现代号棒棒糖的Android5.x存在一个严重的软件漏洞,只要攻击者能拿到机子的情况下,手机若设置的是数字密码解锁方式,只要输入足够长的乱码就能绕过屏幕锁定,进入到HOME主页取...

手机里有钱的,这5项设置要打开,就算丢了别人也偷不走

随着手机支付时代的到来,可恨的坏人也紧跟支付方式的变化,改为盯上了我们的手机。如果你手机里有钱的,那么一定不要掉以轻心,做好以下5项设置,让手机里的钱的更安全。设置SIM卡锁定设置SIM卡锁定,其实就...

原来破解邻居家的WiFi这么难?还是用万能钥匙吧

我们中的许多人认为,入侵wifi就像用铁锤打破塑料锁一样,并且使用以下提到的工具也是如此。入侵无线网络只是从防御性安全转移到攻击性安全的开始部分。入侵wifi包括捕获连接的握手并使用字典攻击等各种攻击...

电脑开机PIN码忘记了怎么办?教你不用重装系统也可以重置

在使用电脑的时候,我们往往会为了保护电脑的安全,从而设置开机密码。但是总会出现PIN码忘记导致无法开机使用,特别是许多用户反复的输入错误密码导致登录次数过多或者重复的开关机,登录选项被禁用,请使用其他...

送你个使用锦囊 防止蓝牙耳机被“策反”

你每天戴的蓝牙耳机可能被定位跟踪?近日有报道称,部分蓝牙耳机存在安全漏洞,可被不法分子快速植入具有定位功能的代码,从而实现远程跟踪,甚至监听。这一话题迅速登上微博热搜榜,不少网友惊呼:自己身边居然潜伏...

系统小技巧:无懈可击 Windows组策略管理系统密码

为了保护自己的系统安全,我们一般都会为系统设置密码。不过很多人为了记忆方便,设置的都是类似“123456”这样的简单密码,或者即使设置了较为复杂的密码,但是使用的时间很长也不变化。这些密码策略其实都有...