参考https加解密思路 实现自己网络请求数据传输的安全性,一致性,防篡改。(对称加密+非对称加密

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全)
img

正文

//解密数据
$data = $request->post('data','');
$data = json\_decode(base64\_decode($data),true);

$key = $data['key'];
$data = $data['data'];

$aes = new AesSecurity(); //对称加密
$rsa = new RsaService(); //非对称加密
//1.使用前后端约定的RSA私钥key解密,得到miwenKey(因为客户端使用公钥加密,所以服务端使用公钥解密)
$miwenKey = $rsa->privateDecrypt($key);
//2.使用上述miwenKey对本次请求的data参数进行AES128解密,得到请求参数密文miwenData
$miwenData = $aes::decrypt($data,$miwenKey);
//3.将json字符串转成数组
$data = json\_decode($miwenData,true);

//todo 打开时间戳校验
$time = $data['time'];
//超过30秒校验失败不允许继续操作
if ($time<time()-30){
    throw new Exception('访问超时,不允许操作');
}

return $data;

}


业务层controller中获得解析后的参数



public function create(LoginRequest $request)
{
//解密数据
$data = r e q u e s t − > a e s D a t a ( request->aesData( request>aesData(request);

$name = $data['name'];
$password = $data['password'];

 .
.
.

}


### 工具类:


1. AES对称加密



<?php /\*\* \* [AesSecurity aes加密,支持PHP7.1] \*/ class AesSecurity { /\*\* \* [encrypt aes加密] \* @param [type] $input [要加密的数据] \* @param [type] $key [加密key] \* @return [type] [加密后的数据] \*/ public static function encrypt($input, $key) { $data = openssl\_encrypt($input, 'AES-128-ECB', $key, OPENSSL\_RAW\_DATA); $data = base64\_encode($data); return $data; } /\*\* \* [decrypt aes解密] \* @param [type] $sStr [要解密的数据] \* @param [type] $sKey [加密key] \* @return [type] [解密后的数据] \*/ public static function decrypt($sStr, $sKey) { $decrypted = openssl\_decrypt(base64\_decode($sStr), 'AES-128-ECB', $sKey, OPENSSL\_RAW\_DATA); return $decrypted; } } ``` [生成RSA秘钥参考链接]( ) 2. RSA非对称加密核心代码: ``` <?php namespace App\Services; use Exception; class RsaService { /\*\* \* 公钥 \* @var \*/ protected $public\_key; /\*\* \* 私钥 \* @var \*/ protected $private\_key; /\*\* \* 公钥文件路径 \* @var \*/ protected $public\_key\_path = '../keys/rsa\_public\_key.pub'; /\*\* \* 采用pkcs8只是为了方便程序解析 \* 私钥文件路径 \* @var \*/ protected $private\_key\_path = '../keys/rsa\_private\_key\_pkcs8.pem'; /\*\* \* 初始化配置 \* RsaService constructor. \* @param bool $type 默认私钥加密 \*/ public function \_\_construct($type = true) { // if ($type) { $this->private\_key = $this->getPrivateKey(); // } else { $this->public\_key = $this->getPublicKey(); // } } /\*\* \* 配置私钥 \* openssl\_pkey\_get\_private这个函数可用来判断私钥是否是可用的,可用,返回资源 \* @return bool|resource \*/ private function getPrivateKey() { $original\_private\_key = file\_get\_contents(\_\_DIR\_\_ . '/../' . $this->private\_key\_path); return openssl\_pkey\_get\_private($original\_private\_key); } /\*\* \* 配置公钥 \* openssl\_pkey\_get\_public这个函数可用来判断私钥是否是可用的,可用,返回资源 \* @return resource \*/ public function getPublicKey() { $original\_public\_key = file\_get\_contents(\_\_DIR\_\_ . '/../' . $this->public\_key\_path); return openssl\_pkey\_get\_public($original\_public\_key); } /\*\* \* 私钥加密 \* @param $data \* @param bool $serialize 是为了不管你传的是字符串还是数组,都能转成字符串 \* @return string \* @throws \Exception \*/ public function privateEncrypt($data, $serialize = true) { $data = substr($data,0,30); openssl\_private\_encrypt( $serialize ? serialize($data) : $data, $encrypted, $this->private\_key ); if ($encrypted === false) { throw new \Exception('Could not encrypt the data.'); } return base64\_encode($encrypted); } /\*\* \* 私钥解密 \* @param $data \* @param bool $unserialize \* @return mixed \* @throws \Exception \*/ public function privateDecrypt($data, $unserialize = true) { openssl\_private\_decrypt(base64\_decode($data),$decrypted, $this->private\_key); if ($decrypted === false) { throw new \Exception('Could not decrypt the data.'); } return $unserialize ? unserialize($decrypted) : $decrypted; } /\*\* \* 公钥加密 \* @param $data \* @param bool $serialize 是为了不管你传的是字符串还是数组,都能转成字符串 \* @return string \* @throws \Exception \*/ public function publicEncrypt($data, $serialize = true) { openssl\_public\_encrypt( $serialize ? serialize($data) : $data, $encrypted, $this->public\_key ); if ($encrypted === false) { throw new \Exception('Could not encrypt the data.'); } return base64\_encode($encrypted); } /\*\* ### 给大家的福利 **零基础入门** 对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。 ![](https://img-blog.csdnimg.cn/img_convert/95608e9062782d28f4f04f821405d99a.png) 同时每个成长路线对应的板块都有配套的视频提供: ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a91b9e8100834e9291cfcf1695d8cd42.png#pic_center) 因篇幅有限,仅展示部分资料 网络安全面试题 ![](https://img-blog.csdnimg.cn/img_convert/80674985176a4889f7bb130756893764.png) 绿盟护网行动 ![](https://img-blog.csdnimg.cn/img_convert/9f3395407120bb0e1b5bf17bb6b6c743.png) 还有大家最喜欢的黑客技术 ![](https://img-blog.csdnimg.cn/img_convert/5912337446dee53639406fead3d3f03c.jpeg) **网络安全源码合集+工具包** ![](https://img-blog.csdnimg.cn/img_convert/5072ce807750c7ec721c2501c29cb7d5.png) ![](https://img-blog.csdnimg.cn/img_convert/4a5f4281817dc4613353c120c9543810.png) **所有资料共282G**,朋友们如果有需要全套《网络安全入门+黑客进阶学习资源包》,可以扫描下方二维码领取(如遇扫码问题,可以在评论区留言领取哦)~ **网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。** **需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)** ![img](https://img-blog.csdnimg.cn/img_convert/fc2a51a274a786f0c4df75fab7badb3b.png) **一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!** 网络安全入门+黑客进阶学习资源包》,可以扫描下方二维码领取(如遇扫码问题,可以在评论区留言领取哦)~ **网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。** **需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)** [外链图片转存中...(img-wWFJ4Xbm-1713227835342)] **一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
  • 18
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值