- 博客(34)
- 收藏
- 关注
原创 Crypto Building Blocks加密构建块
假设Alice向Bob发送(m,H(m))。中间人截取后,修改m为n,然后向Bob发送(n,H(n))。但实际上,由于信息可能很大,运算起来会比较慢。因为中间人不知道双方共享的密钥s,即使可以截取到信息m,也无法构造H(m,s)。:你得先有安全通道把 K 送过去,但你又是因为没有安全通道才想加密……Bob 用自己的私钥对消息做“加密”(更准确叫签名运算):得到。用来解决的就是密钥分发的问题,因为不需要先与他人共享密钥。:输入任意长消息,输出固定长度摘要(digest)。要认证,就需要密钥参与。
2026-06-26 12:47:30
149
原创 传输层安全
传输层安全(TLS) 就是在HTTP和TCP之间TLS 就是在但是这样明文会直接传输。HTTP 本身是明文的。中间有人抓包,可能直接看到。所以 HTTPS 其实就是:HTTP + TLS = HTTPSTLS 主要做三件事:第一,。别人抓包也只能看到乱码,看不到你发的密码、cookie、网页内容。第二,。浏览器会检查证书,确认你连到的确实是,不是攻击者假冒的网站。第三,。中间人不能偷偷把服务器返回的内容改掉。比如把pay $10 -> pay $1000 TLS 会检测出来。:机密性。
2026-06-26 12:44:22
187
原创 网络层安全
TLS 主要保护的是的数据,比如 HTTP 内容。但它通常,所以别人还是能知道:你在和哪个服务器通信通信双方是谁一些流量模式信息而,所以它更“底层”,覆盖范围更大。发送方对加密;这个 payload 里可以是 TCP、UDP、ICMP 等;实现位置在传输层下面,所以对更高层透明;因此它能对“所有上层数据”提供一种。
2026-06-26 12:38:26
374
原创 基于DOM的XSS攻击
基于 DOM 的 XSS 漏洞通常出现在 JavaScript 从攻击者可控的来源(例如 URL)获取数据,并将其传递给支持动态代码执行的接收器,比如eval(),innerHTML。DOM XSS 最常见的来源是 URL,通常使用 `<object>` 对象访问 URL。攻击者可以构造一个链接,将受害者引导至存在漏洞的页面,并在查询字符串和 URL 片段中植入恶意代码。我们下面使用portswigger上的靶场举例我们首先进入靶场环境。
2026-06-26 12:32:35
157
原创 SSRF漏洞详解
它可以访问内网数据库、内网管理后台、云服务器的元数据接口……这些都是你直接访问不到的(因为有防火墙)。: 你给服务器一个 URL,欺骗服务器去访问这个 URL。因为请求是从服务器发出的,防火墙一看是自己人,于是你就能通过服务器,探测和攻击内网。判断SSRF漏洞是否存在的重要前提是:请求一定是服务端发起的,以上链接即使存在也不一定代表这个请求是服务端发起的。因此前提不满足的情况下,不需要考虑SSRF。判断 SSRF 的只有一条:客户端发起(假 SSRF)
2026-01-20 22:36:46
742
原创 文件包含漏洞(加DVWA靶场练习)
白名单:最狠的招,写死只能包含哪几个文件(如DVWA Impossible级别)。权限控制:设置目录权限,不让你访问敏感目录。关配置:把关掉。
2026-01-19 21:54:03
695
原创 RCE漏洞(DVWA靶场例子
Remote Command/Code Execute(远程命令/代码执行):攻击者通过漏洞,直接让服务器乖乖执行你发过去的系统命令(比如pingwhoami)或者代码(比如eval。
2026-01-19 20:06:54
648
原创 Web 文件上传漏洞(+Upload-labs靶场练习)
简单说,就是网站允许你上传文件(比如头像、附件),但没把门看好。 逻辑是这样的:用户上传 -> 服务器校验(如果不严) -> 保存 -> 用户访问 -> 代码执行 。一旦你成功上传了一个 文件(或者其他能被解析的脚本),并且知道了它的路径,恭喜你,这台服务器就是你的了 。对靶场Uploads- labs(Pass-01)的源码分析看的出这关是利用前端的JS脚本检测,我们可以直接禁用JS。直接在F12里,然后按F1,找到禁用JS然后我们就可以上传一句话木马后续再用蚁剑链接即可。当然这个关卡也可以
2026-01-15 20:22:06
766
原创 跨站脚本攻击XSS入门(+DVWA、Pikachu靶场练习)
简单说,XSS就是,当用户浏览这个页面时,这段代码就在用户的浏览器里跑起来了。哪怕服务器端固若金汤,只要前端漏了风,XSS照样能把用户的Cookie偷得底裤都不剩。
2026-01-15 14:10:17
652
原创 Windows取证
如果把Windows主机比做成一个人,那么注册表就是他的记忆宫殿。操作系统什么时候出生的?名字是什么?安装过什么软件?哪些用户登录过?这些都藏在这本“日记本里”。注册表不是一大堆文件堆在一起,而是一个巨大树形结构的数据库,系统和用户做的每一件事都会留下痕迹。系统环境:版本,安装时间,时区,主机名。硬盘驱动:开机时加载了哪些部件账户档案:这台机器上有谁的账号,什么时候创建的,登录过几次安全策略:密码复杂度,本地安全设置用户习惯:常用的程序,点开过哪些文件,插过什么U盘。
2025-10-04 19:05:12
1342
2
原创 全面理解文件系统
本文从硬件结构、存储逻辑和文件系统三个层面解析了磁盘存储与文件管理的原理。首先介绍了硬盘的物理结构,包括盘片、磁道和扇区等基本单元;其次阐述了操作系统如何通过LBA线性寻址访问磁盘;然后重点分析了Linux文件系统的核心机制,包括inode索引、块位图、组描述符等组件,详细解释了文件创建、删除、查找和修改的具体过程;最后探讨了目录项映射和软硬链接的实现原理。文章特别强调了删除操作的本质只是修改位图标记而非清除数据,为数据恢复提供了理论基础。全文以通俗易懂的方式呈现了文件系统的底层逻辑,适合网络安全和取证领域
2025-09-28 11:03:51
1136
原创 CTF ——套娃解压
本文介绍了一个用于解决CTF竞赛中"套娃解压"题目的Python脚本。作者在初次遇到这类题目时,通过手动解压发现问题后,编写了一个自动化脚本。该脚本支持多种压缩格式(zip/7z/gz/bz2/xz),通过文件魔数识别类型,并采用递归解压方式处理嵌套压缩文件。文章详细讲解了各解压函数的实现逻辑,包括安全输出路径处理、文件类型判断等关键功能,同时指出了当前脚本的局限性(如不支持tar格式)和优化方向。作者已将完整代码开源在GitHub和Gitee平台。
2025-09-25 18:35:10
1358
原创 手撕一颗AVL树:从理论到代码的完整指南
✅ 深入理解了AVL树的平衡机制。✅ 掌握了旋转操作的实际应用场景。🔧 添加删除操作的实现。🔧 增加树的可视化输出,便于调试。
2025-04-13 16:03:43
324
原创 深入理解C++多态:从虚函数到虚表,再到虚继承
多态是C++面向对象的核心,深入理解虚函数、虚表、虚继承等机制非常重要。本文示例代码已上传至Gitee仓库链接t=P1C7Gitee仓库链接https://gitee.com/roaring-black-fertilizer/cpp/commit/8d22691aef784404cb6633994c40a12ac1f893a9。
2025-04-02 13:18:43
879
原创 手撕C++ STL list容器:从指针缠绕到迭代器封装的实践笔记
最近在学习STL容器的底层实现,发现双向链表(list)的设计非常巧妙。为了深入理解其原理,我决定从零实现一个简化版list。本文将分享我的实现思路、踩坑记录以及关键代码解析,完整代码已上传至Gitee仓库Gitee仓库list<A> lt;// 通过->访问成员通过这次手写list的实现,我深刻理解了:迭代器如何屏蔽底层指针差异环形链表结构对边界处理的简化模板编程在容器设计中的威力未来优化方向添加反向迭代器实现异常安全保证支持自定义内存分配器。
2025-03-23 21:35:49
805
原创 手撕一个STL风格的vector容器:详解与踩坑记录
通过实现一个简化版vector,我们深入理解了动态数组的内存管理、迭代器失效机制、深拷贝必要性等核心概念。完整代码已托管至Gitee仓库,建议结合测试用例进行调试学习。希望本文能为你的STL学习之路提供一盏指路明灯!t=P1C7。
2025-03-20 16:34:31
1000
原创 手撕一个C++ string类:深入理解字符串操作与内存管理
手动实现string类不仅加深了对字符串操作和内存管理的理解,也让我体会到标准库设计的精妙之处。未来将继续优化此实现,并探索更多底层技术细节。希望本文能为你的学习提供启发!t=P1C7源代码链接https://gitee.com/roaring-black-fertilizer/cpp/commit/13317b2cacfdc490bade7c0fb4e97b39928240c1。
2025-03-18 16:14:36
1003
原创 C++面向对象编程入门:封装艺术
假设你要开发个智能日历,核心就是处理日期。这正是封装要解决的典型问题——通过构造函数/析构函数管理资源生命周期。这就是封装的威力——把危险操作关在笼子里。的关键字,像交通信号灯一样控制访问权限。这时候就需要C++的。咆哮的黑化肥/cpp。
2025-03-14 18:02:33
762
原创 实现常见排序算法(下)——高级篇
本文详细解析了快速排序的三种分区策略、非递归实现,以及归并排序和计数排序的核心逻辑。完整代码已同步至 GitHub/Gitee 仓库,建议结合代码调试加深理解。各算法对比排序算法平均时间复杂度适用场景快速排序O(n log n)通用场景归并排序O(n log n)外部排序计数排序小范围整数t=P1C7t=P1C7。
2025-02-19 21:27:55
801
原创 实现常见排序算法(上)——基础篇
总结:基础排序算法虽简单,但包含了重要的设计思想(如分治、预处理)。实际开发中需根据数据规模选择合适的算法。下篇将深入讲解快速排序、归并排序等高级算法,敬请期待!t=P1C7t=P1C7点击查看https://github.com/black985211/initial-data-structure/commit/aa0ed7b815c9e9e37264d54a942a8ee67af442a6。
2025-02-18 16:15:57
727
原创 学习二叉树层序遍历:代码实现与详细解析
刚学完二叉树的层序遍历时,我对着课本上的示意图发呆了半小时——明明知道是按一层一层的顺序遍历,但代码就是写不出来。直到自己动手把队列和二叉树结合起来调试,才真正理解了"队列是层序遍历的灵魂"这句话。今天就把我的学习过程整理成这篇实战笔记,手把手教你在C语言中实现这个看似简单实则暗藏玄机的算法!
2025-02-14 12:13:49
964
原创 从零实现C语言大顶堆:代码详解与排序实战
结构,满足任意节点的值总是不小于(大顶堆)或不大于(小顶堆)其子节点的值。常用于实现优先队列、堆排序等场景。本文将通过C语言代码,手把手带你实现一个动态扩容的大顶堆,并完成堆排序实战!堆排序分两步:建堆(向下调整) + 依次交换堆顶与末尾元素。删除堆顶元素时,将末尾元素交换到堆顶,再通过。插入元素时,先将其放在数组末尾,再通过。登录 - Gitee.com。堆(Heap)是一种。
2025-02-11 18:03:55
563
原创 从零实现C语言栈与队列:代码详解与实战测试(文末附完整代码仓库链接)
栈(Stack)和队列(Queue)是数据结构中最基础且应用广泛的两个概念。栈遵循。
2025-02-09 08:31:10
1935
原创 手把手教你实现C语言双向链表:从入门到实战 (完整代码已上传至Gitee)
哨兵位的优势:避免处理空链表的特殊情况,代码更简洁。时间复杂度O(1)O(n)优化点:可增加链表长度字段,快速获取长度。
2025-02-09 08:17:25
851
原创 C语言实现单链表:增删改查全都安排上了
前段时间在学习数据结构的时候,对单链表操作有了一定的认识,于是写了一个简易的单链表来练手。写完之后,感觉对链表的增删改查逻辑一下子清晰不少,特地记录下来,希望能帮到正在学习链表的朋友们。单链表(Singly Linked List)是一种动态数据结构,每个节点包含数据和指向下一个节点的指针。当然,单链表也有缺点,比如不支持随机访问,查找元素需要遍历链表,时间复杂度为O(n)。:在已知节点位置的情况下,插入和删除的时间复杂度为O(1)。:每个节点包含数据域和指针域,指针域指向下一个节点。
2025-02-07 20:22:55
941
原创 从零实现顺序表:我的数据结构入门实践与心得
最近在学习数据结构,顺序表作为线性表的入门内容,自然是我的第一个实战目标。,查询效率高(O(1)时间复杂度),但插入和删除需要移动元素,效率较低(O(n))。对于新手来说,实现顺序表能帮助理解数组、内存管理和数据结构的基础设计思想,是个不错的练手项目。下一步计划实现链表,对比二者的差异,进一步巩固知识。顺序表(SeqList)的核心在于“连续存储”,这与链表的“离散存储”形成对比。:最坏情况下(在头部插入)需要移动所有元素,效率较低,这也是顺序表的短板。插入元素时需要将后面的元素后移,删除时则需前移。
2025-02-07 20:04:55
864
原创 使用C语言实现自定义排序函数:模仿qsort实现my_qsort
在C语言中,标准库函数qsort是一个灵活且强大的通用排序工具。为了加深对其实现原理的理解,我尝试模仿qsort实现了一个简单的排序函数my_qsort,支持对任意类型数据的排序,并允许用户自定义比较规则。本文首先简要介绍了qsort的使用方法和功能,然后详细分享了my_qsort的实现过程,包括核心函数swap、cmp以及冒泡排序逻辑。通过本次实践,我不仅复习了指针操作和内存管理,还对排序算法的实现有了更直观的理解。
2025-01-25 19:59:56
1070
原创 C语言数据存储原理:整数类型、字符类型与内存管理
本文深入探讨了C语言中的数据存储原理,重点介绍了整数类型、字符类型以及与内存相关的基本概念。通过具体的代码示例,详细讲解了如何判断系统的字节序(大端与小端)、符号扩展对字符类型的影响、以及溢出与补码运算在不同数据类型中的表现。此外,本文还探讨了无符号类型的回绕行为和字符数组在内存中的存储方式。通过这些实例,帮助读者理解数据如何在内存中存储和操作,为编写高效、稳定的C语言程序提供理论支持和实践指导。
2025-01-12 10:21:10
928
原创 C语言实现简易人机对战井字棋游戏
本博客详细介绍了如何使用C语言实现一个人机对战的井字棋游戏,包括项目的开发背景、设计思路、代码实现和功能解析。通过模块化编程思想,将整个项目分为头文件、核心功能实现和主程序控制三部分,逐步完成棋盘初始化、玩家与电脑的落子操作、游戏状态判断等功能。博客重点阐述了代码的编写顺序与逻辑结构,帮助读者理解如何从零开始构建一个完整的井字棋游戏,并提供了运行示例和优化方向,适合C语言初学者深入学习和实践。
2024-12-17 21:09:15
1935
原创 简单的二分查找算法实现与解析
通过本篇博客,我们学习了如何使用 C 语言实现一个二分查找算法。二分查找在已排序的数据集上能够高效地找到目标元素,时间复杂度仅为对数级别。二分查找是一种经典的搜索算法,通常用于查找一个有序数组中的元素。相比于线性查找,二分查找具有更高的效率,时间复杂度为 O(log n),因此在处理大数据量时非常有效。在每次比较时,都会将查找范围减半,因此查找的次数与数组的大小呈对数关系。这比起线性查找(O(n))效率要高得多,尤其在处理大数据时优势明显。设置为数组的最后一个下标,设置为数组的第一个下标。
2024-12-09 11:47:44
640
原创 C语言实现简单的猜数字游戏(含详细代码解析)
目录引言一、游戏功能介绍二、程序实现步骤1. 游戏菜单设计2. 随机数生成与游戏逻辑3. 主函数与整体控制三、程序运行效果1. 游戏菜单2. 游戏开始 3. 继续游戏或退出四、总结与优化五、完整代码 猜数字游戏是一种经典的游戏,玩家需要猜测计算机生成的数字。在这篇博客中,我将详细介绍如何使用 C 语言编写一个简单的猜数字游戏,解释代码的实现过程和关键技术细节,并分享一些可以改进的地方。希望这篇博客能帮助初学者理解 C 语言中的随机数生成、循环结构和输入输出控制。这个猜数字游戏的基本功能如下:下面我将按模块
2024-12-09 11:38:59
2376
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅