CTF 竞赛密码学方向学习路径规划
目录
- 计算机科学基础
- 计算机科学概念的引入、兴趣的引导
- 开发环境的配置与常用工具的安装
- Watt Toolkit(Steam++)、机场代理
- Scoop(Windows 用户可选)
- 常用 Python 库
- SageMath
- Linux
- 小工具 yafu
- OpenSSL
- Markdown
- 编程基础
- Python
- 其他编程语言、算法与数据结构(可选)
- 数学基础
- 离散数学与抽象代数
- 复杂性分析
- 密码学的正式学习
- 兴趣的培养
- 做题小技巧
- 系统学习
- 需要了解并运用的密码学算法
- 密码学导论
- 安全性证明(非必要)
- 实践
本文章系密码学学习资源的汇总,针对于信息安全专业,仅供参考。该版本为第一版,有待完善,恳请大佬批评指正!
计算机科学基础
密码学需要利用计算机来提高加密、解密的效率,通过高效的算法与实用的 Python 库优化解决方案,节约大量的时间和精力,因此适当计算机科学的学习是绝对必要的。
计算机科学概念的引入、兴趣的引导
Computers are not magic! 计算机科学并非是玄幻的学问,它的每一个概念都是基于严谨而有趣的逻辑推理的,科普向系列视频 Crash Course: Computer Science 在短短 8 个小时里非常生动且全面地科普了关于计算机科学的方方面面——计算机的历史、计算机是如何运作的、组成计算机的各个重要模块、计算机科学中的重要思想……这一系列视频将会让初学者对计算机科学形成全貌性的感知,激发内在的兴趣,促使初学者继续探究计算机科学浩如烟海的理论与实践。
开发环境的配置与常用工具的安装
Watt Toolkit(Steam++)、机场代理
计算机科学的学习会频繁使用到大名鼎鼎的代码托管开源网站 GitHub,而由于国内特殊的敏感原因,有些时候 GitHub 无法正常访问,我们需要 Watt Toolkit 获取高速访问 GitHub 的线路。
同时,为了访问国外优质的教育论坛及资源网站,我们需要 Clash
等来进行代理连接,即所谓翻墙 (逃) 。
Scoop(Windows 用户可选)
相较于 Linux、Mac,Windows 由于没有统一的标准而使得开发环境的搭建一直是复杂而困难的问题。 Scoop 可以帮助我们统一安装并管理常见的开发软件,省去了手动下载安装,配置环境变量等繁琐步骤。
常用 Python 库
Crypto
、libnum
、gmpy2
、random
、hashlib
、pwn
。
SageMath
一个功能超完善的计算平台对一个密码手来说无疑是很有吸引力的,这意味着很多算法和相关代数结构不需要自己费心去写了。
SageMath 是一个基于 GPL 协议的开源数学软件,使用 Python 作为通用接口,将现有的许多开源软件包整合在一起,构建一个统一的计算平台。它是 Magma,Maple,Mathematica 和 MATLAB 的免费下位替代品。
可以通过编写后缀名为 .sage
的文件(同时支持 Python 和 SageMath 语法)来运行相关解题脚本。
Linux
建议安装一个 Linux 虚拟机来提高密码学解题的效率。对于 Linux 命令的学习,可以按照国外 star 数超 150k 的 GitHub 项目「命令行的艺术」提供的顺序自学,也可以在实际生产环境中利用搜索引擎逐步学习。
小工具 yafu
用于分解质因数,也有类似功能的网站。
OpenSSL
OpenSSL 是一个加密库,支持传输层安全防护(TLS)和安全套接字层(SSL)协议的开源实现。它提供了生成私钥、管理证书以及为客户端应用加密和解密的功能。
解题时遇到奇怪的文件后缀名,或许这个库可以解决。
Markdown
学习一下 Markdown 语法,平时可以写 CSDN 等博客记录自己的学习笔记。
编程基础
详见 CS-DIY 自学指南。
Python
Python 是 CTF 中 crypto(密码学) 题最常用的编程语言。
❗️建议:由于个别编码兼容性问题,Python 2 和 Python 3 最好都安装,更常用的可能是 Python 3。
对于密码学方向,初学者并不要求过硬的 Python 基础,正确地表达密码学相关算法即可。我们可以通过菜鸟教程网站来快速入门 Python 语法,在实际的解题过程中再通过搜索引擎解决算法表达的问题。
长远地来说,我们可以通过 Python 程序设计来系统地构建编程思维与算法理念来进一步提升编程水平,提高算法表达能力。推荐 UCB CS61A: Structure and Interpretation of Computer Programs ,伯克利 CS 系列第一堂 Python 入门课,强调抽象,让学生掌握用程序来解决实际问题,而不关注底层的硬件细节,使得代码更加模块化、更易读;同时还会涉及 Scheme 和 SQL 两大编程语言,在它们的学习和比较中拥有快速掌握一门新的编程语言的能力,对于信息安全专业后续的学习大有裨益。
CS61A 这套课程建议配套大佬分享的学习笔记(GitHub)食用,里面包含了课程的作业、实验、项目的代码以及部分难点的总结,推荐通过课程大纲对该学习笔记进行系统地翻阅与学习。建议先自主尝试完成作业、实验、项目,再翻阅笔记。
此外,时不时地查看课程教材 Composing Programs 的一些插图和更详细的阐述可能会有帮助。
其他编程语言、算法与数据结构(可选)
不仅仅是单纯的 CTF 竞赛,对于应用密码学,可以再选修 C 语言与汇编语言,内联汇编能在实现代码算法优化的时候提升效率。对此,数据结构(例如二叉树,Merkle Tree——包括成员证明、基于哈希的数字签名——另外像端到端加密的群组密钥更新 TreeKEM 也有用二叉树结构,主要作用就是从线性复杂度优化成对数复杂度)也是较为重要的。
对于算法与数据结构,推荐阅读《算法 4》,既讲解了Java 编程语言的基础知识,又讲解了数据结构,同时深入浅出地讲解了计算机科学中的50个经典算法,包含了 Java 语言的完整实现;也可以阅读大佬 labuladong 的书籍《labuladong 的算法笔记》,更偏向于大厂算法面试,对于算法思维的提升更有效率。
对于底层的密码学应用,还应该掌握一些操作系统原理(堆栈、内存管理,说到底还是为了提升效率);不过这些内容更偏向于实际生产中的密码学技术,对于国际 CTF 竞赛级别以下的赛事可能帮助并不显著。
以上内容也是信息安全专业必修的内容之一,一般为计算机组成原理、操作系统、算法与数据结构等。在拥有一定的 C 语言编程基础后,推荐先学习计算机体系结构课程 CS61C: Great Ideas in Computer Architecture,深入计算机的硬件细节,带领学生逐步理解 C 语言是如何一步步转化为 RISC-V 汇编并在 CPU 上执行的。可先利用菜鸟教程网站自学 C 语言语法基础,在课程的学习中逐步规范细节。课程使用的作业、实验与项目代码在对应的 GitHub 仓库中。
接下来,可以学习计算机组成原理的重头戏 CMU CS15213: CSAPP 深入理解计算机系统课程。操作系统课程可以学习国内的 NJU OS: Operating System Design and Implementation。
要是做区块链的话,计算机网络需要好好学(涉及到网络层和传输层协议)。
具体学习的路径详情参考这里。
数学基础
密码学的本质是数学。数学基础学习可与密码学学习同时进行,相辅相成。
离散数学的学习不可或缺。加密与解密离不开计算机,而计算机本质上是一个离散结构,只能处理离散的数量关系,因而离散数学在 CTF 密码学方向占比很大,crypto 题中常涉及的是数论和抽象代数,例如威尔逊定理、欧拉定理、费马小定理、中国剩余定理(CRT)、拓展中国剩余定理(extend CRT)等,还有群、环、域、格等代数结构及其相关内容。
优先推荐王立斌的《具体数论与代数》(A Concrete Introduction to Number Theory and Algebra, CINTA),涉及的数学知识和代码都非常友好,适合初学者自学。另外,作为头脑风暴之后的休息调整、梳理归纳,我们可以在高强度的数学理论学习之余穿插观看较为简单通俗、提纲挈领式的哈工大信息安全数学基础课程视频,进一步总结所学数学知识框架。
离散数学与抽象代数
离散数学是抽象代数的基础。
可以阅读 Kenneth H. Rosen 编写的《离散数学及其应用》,这是一本高中生都可以看懂的离散数学教材,里面包含了详尽的讲解、丰富的实例、大量的习题。
可以选择性地学习 UCB CS70 : discrete Math and probability theory 中离散数学部分的课程笔记,做一些习题,不推荐看相应的视频。虽然阅读全英文的笔记具有一定的挑战性,但是较强的英文阅读能力可以有效地提升学术研究的质量;可以利用划词翻译等实用工具来辅助阅读英文文献。
一般数学和计算机学院都会开设离散数学这门课程,但电子信息学院可能不会开设。进一步,可能只有数学学院会开设抽象代数课程,计算机学院和电子信息学院一般会开设编码理论。
完成离散数学的学习后,可以观看哈佛大学 Benedict Gross 教授的课程 MATH E-222 Abstract Algebra(前 5 讲可以看这个精翻,剩下的看这一系列的机翻;当然 B 站 up 主“GPT 中英字幕课程资源”的翻译作品也可观看,只是少部分内容需要充电)以学习抽象代数,其讲解激情四射,引人入胜,唯一的遗憾就是他的课堂笔记实在有一些凌乱。可以在网络上找到这门课程的笔记(需翻墙),这可能会对学习有所帮助。
对于数论入门,推荐阅读 Joseph Silverman 撰写的《数论概论》,这本书涵盖了初等数论直接用于密码学的所有部分,包含素数理论、费马小定理、二次剩余、椭圆曲线,可读性非常好。
同时,也可阅读 MIT 初等数论课程 Theory Of Numbers 的课程笔记,进行一些练习;B 站 IMO 金牌教练韩老师的数论系列讲座也可观看。若是学习初等数论过程中存在理不清头绪、摸不清原理的情形,还可以观看初等数论课程(不挂科)期末速通,快速且简单扼要地梳理数论知识。
复杂性分析
无论是方案的计算复杂性分析,还是密码学的安全理论,都需要用到计算复杂性的知识。理解计算复杂性的相关概念将对密码学的理解带来很大的帮助。
推荐卡耐基梅隆大学 Ryan O’Donnel 教授的计算复杂性课程,分别为本科生开设了课程Undergraduate Complexity Theory,为研究生开设了课程 Graduate Computational Complexity Theory。本科生课程不讲解概率多项式时间算法,由于密码学领域经常涉及这一概念,因此推荐直接学习研究生课程。当然,如果感觉难度比较大,也可以先学习本科生课程。
Ryan O’Donnel 教授同样讲解了《量子计算与信息》Quantum Computation and Information 课程(量子计算对密码学产生了深远影响。为了应对量子计算的威胁,密码学家开始研究“量子抗性”算法,以确保信息在量子计算机存在的情况下仍能安全传输和存储。量子计算机的独特能力可能对现有的某些密码算法进行暴力破解,尤其是基于大数分解和离散对数等复杂数学问题的非对称密码学算法,属于密码学研究前沿领域)以及 Analysis of Boolean Function 课程(布尔函数是一类把有限域上的二进制向量映射到一个二进制值的函数。 在密码学中,布尔函数广泛应用于密码算法和协议的设计中,被用于数据加密、数字签名、密钥生成等方面,其密码学性质包括均匀性、平衡性、非线性性和秘密性等),如果需要也可以听一听。
密码学的正式学习
- 没事多搜索(既然学会了访问外网的方法,就要灵活使用谷歌、维基百科等优质的国外资源!)
- 克服畏难心理,很多题不需要完全懂里面的数学原理也能做
- 平时多收集各类脚本、网页,解题事半功倍
- 兴趣是最好的老师,心情次之。没有兴趣或许可以换个方向,没心情做题可以休息一会儿
- 某些杂项题和密码题只涉及词频分析、编码、古典密码、流密码,少有对数理知识和读写代码能力的要求,但却很考验大家的脑洞,而个人的脑洞是有限的,所以建议团队协作
可以看看密码学竞赛选手从入门到前沿的大纲,自己去搜索引擎查漏补缺,以下也会部分摘录。推荐有时间看看密码学笼统的入门指南 CTF Wiki - 密码学。
兴趣的培养
可以先跟着这篇博文动手实践一下各种常见编码,随后可以通过 Hello CTF 的密码学部分大致了解密码学基本内容,以及一些工具的拾遗。
推荐密码学科普类书籍《图解密码学技术》,培养对密码学的兴趣,了解各种密码体系。也可以看看《深入浅出密码学》浅显地了解现代密码学。
随后,我们可以到攻防世界的 Crypto 区,使用新手模式的难度分级功能,从等级 1 开始逐步挑战解决较为容易的密码学问题,尝试自主思考,实在不会再看 Write Up(题解),同时看 Write Up 的时候应当注意总结思考,挑战的难度等级可逐步提升。
做题小技巧
- 首先从标题、描述、附件等判断是哪一类的密码,然后再对症下药。可以从常见的编码和古典密码开始,之后就可以涉猎对称和非对称密码了;对称密码的话,AES 及其五种工作模式( ECB,CBC,CFB,OFB,CTR)是绕不开的;非对称的话肯定是从 RSA 开始了。
- 题目附件里的代码常有如下字样:
from secret import flag
可以理解成出题人把 flag 藏在 secret 这个私有库里了,这样的代码不能直接运行,而需要做题人通过分析代码里面的加密方式还原出 flag。
- 在某些题目中,虽然代码本身运行不了,但是某些函数却可以利用(oracle),解密时可以直接挪用到自己的解题脚本上运行。
系统学习
「古典密码学 Classic cryptography 」 和 「现代密码学 Modern cryptography 」 均属于密码学分支,只是重心发生了侧移,大家更加关心现代密码学相关使用和研究。
由于密码学的发展以及 CTF 比赛的不断革新,编码和古典密码已经很少出现在密码学方向的题目中了,即使出现也会跟随现代密码学一同使用,更常见的反而是在「 杂项 MISC 」中作为签到题或者一般简单题目考察,因此 CTF Crypto 的考察核心在于现代密码学。不过,作为计算机领域信息传递最基本的一环,不论选择了密码学还是杂项,编码技术都值得详细阅读和了解。
需要了解并运用的密码学算法
首先是一些入门的编码:ASCII
,base64
等(值得一提的是,Crypto
库里的 bytes_to_long()
和 long_to_bytes()
很常用,务必搞清楚它在做什么);
然后是古典密码,比如摩尔斯电码,栅栏密码、凯撒密码、猪圈秘密、棋盘密码、培根密码、维吉尼亚密码等,还有一些 XXencode
、UUencode
、brainfuck
等依靠经验的密码或编码,均能在网上自主学习;
再之后是 RC4、DES、AES、哈希、DH密钥交换、RSA、ECC、格密码……
crypto 常用算法有:
- 线性同余方法(lcg)
- 欧几里得算法(gcd)
- 拓展欧几里得算法(extend gcd)
- 小步大步算法(bsgs)
- 拓展小步大步算法(extend bsgs)
- 费马因式分解
- CopperSmith 方法
- ……
密码学导论
推荐观看 Dan Boneh 的密码学系列课程,可以在评论区找到相关课程资源。
PDF 推荐《深入浅出密码学:常用加密技术原理与应用》以及 Introduction to Modern Cryptography, 2nd Edition,或者其第一版中文译本《现代密码学——原理和协议》;同时,Dan Boneh 教授联合著名密码学家 Victor Shoup 教授撰写面向研究生的密码学教材 A Graduate Course in Applied Cryptography 值得一读,这本教材与前面提到的 Introduction to Modern Cryptography, 2nd Edition 教材风格类似,但由于是面向研究生的教材,其难度相对会更大,安全性证明的描述更加全面。
安全性证明(非必要)
研究公钥密码学相关领域,安全性证明是不可避免的门槛。实际上,通过密码学导论相关读物,我们已经或多或少地知晓了安全性证明的基本思路,也阅读到了一些密码学方案的安全性证明。但是,学习已有的证明是一方面,是否可以独立自主地撰写安全性证明又是另一个难题。如果不知道如何为哪怕一个简单的方案撰写安全性证明,可以阅读 Victor Shoup 教授的论文 Sequences of Games: A Tool for Taming Complexity in Security Proofs。这篇论文不会让安全性证明变得简单,但是会讲解怎么更系统地整理证明思路,把细节一步步地、有调理地放在一串攻击者与仿真者的游戏里。
如果仍然对安全性证明一筹莫展,可以考虑观看郭福春老师的有关安全归约的视频(所谓安全归约,一种密码学中的分析方法,将一个密码方案的安全性建立在一个已知的困难问题上。通过归约,可以证明密码方案的安全性,使其不可被攻破),对几乎所有安全性证明写得非常好的方案进行了完整的讲解,也可以阅读对应的教材 Introduction to Security Reduction,建议精读。
除了这些基础的话题,剩下的具体问题,比如IBE、ABE或者密钥生成协议的安全性证明等,很多得找具体的 paper 和论文集,而不是教科书能解决的了,因此应当逐步强化查阅论文的能力。
特别要注意的是,很多论文都有会议版本和期刊版本。如果论文只有会议版本,作者一般也会将论文的扩展版本(或称完整版本)上传至国际密码学研究协会(International Association for Cryptologic Research, IACR)的网站上。如果想精读一篇论文,建议寻找发表在 IACR 上的版本,此版本的内容可能会更加全面。
更多详情请参见这里。
实践
刷 crypto 题是伴随着密码学系统的学习逐步深入的,可以在各大靶场例如 NSSCTF、攻防世界、BUUCTF、CTFHub 等进行相应题的练习,学会使用编程语言表达密码学思想,逐步提升做题能力与技巧。
很多 CTF 赛会发布官方的题解,例如 LiteCTF 2023 的官方 Write Up,完成题目后请及时查看相应的题解(非官方也可),看懂题解的思路与具体实现,对自己未考虑到的方法进行总结。
这往往是最为关键的环节,从理论发展为实践、应用对于 CTF 竞赛是极为重要的,建议在做题过程中反复回顾基础理论,理解并归纳题目的用意与涉及思想、理论,从而融会贯通,形成高效的 CTF 解题闭环。
相关文章:

CTF 竞赛密码学方向学习路径规划
目录 计算机科学基础计算机科学概念的引入、兴趣的引导开发环境的配置与常用工具的安装Watt Toolkit(Steam)、机场代理Scoop(Windows 用户可选)常用 Python 库SageMathLinux小工具 yafuOpenSSL Markdown编程基础Python其他编程语言…...
2024数学建模国赛B题代码
B题已经完成模型代码!详情查看文末名片 问题1:可以考虑使用统计学中的“样本量估算”方法,使用二项分布或正态近似来决定最少的样本量,并通过假设检验(如单侧检验)在95%和90%置信度下进行判断。 import n…...

PyTorch 卷积层详解
PyTorch 卷积层详解 卷积层(Convolutional Layers)是深度学习中用于提取输入数据特征的重要组件,特别适用于处理图像和序列数据。PyTorch 提供了多种卷积层,分别适用于不同维度的数据。本文将详细介绍这些卷积层,特别…...
【Kubernetes知识点问答题】kubernetes 控制器
目录 1. 说明 K8s 控制器的作用? 2. 什么是 ReplicaSet,说明它的主要用途。 3. Deployment 控制器是如何工作的,举例说明其常见用途。 4. 解释 DaemonSet,列举其使用场景。 5. 什么是 StatefulSet,其主要作用是什么…...

Patlibc———更快捷的更换libc
起初是为了简化做pwn题目时,来回更换libc的麻烦,为了简化命令,弄了一个小脚本,可以加入到/usr/local/bin中,当作一个快捷指令🔢 这个写在了tools库(git clone https://github.com/CH13hh/tools…...

基于飞腾平台的Hive的安装配置
【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适…...
c# json使用
安装包 用NuGet安装包:Newtonsoft.Json 对象转为Json字符串 public class Person {public string Name { get; set; }public int Age { get; set; } }Person person new Person { Name "John Doe", Age 30 }; string json2 JsonConvert.SerializeO…...

单点登录:cas单点登录实现原理浅析
cas单点登录实现原理浅析 一晃几个月没写博客了,今年多灾多难的一年。 安能摧眉折腰事权贵,使我不得开心颜! 财富是对认知的补偿,不是对勤奋的嘉奖。勤奋只能解决温饱,要挣到钱就得预知风口,或者有独到见解…...

java报错
java.lang.RuntimeException: org.hibernate.PersistentObjectException: detached entity passed to persist: com.tengzhi.base.model.E_xt_xmda...

uniapp动态页面API
目录 uni.setNavigationBarTitle动态设置标题 uni.showNavigationBarLoading为标题添加加载动画与uni.hideNavigationBarLoading停止加载动画 编辑 uni.setNavigationBarColor用于设置导航栏的颜色,包括背景颜色和文字颜色。这对于自定义应用的主题和风格非常有…...
最优化方法Python计算:求解约束优化问题的拉格朗日乘子算法
从仅有等式约束的问题入手。设优化问题(7.8) { minimize f ( x ) s.t. h ( x ) o ( 1 ) \begin{cases} \text{minimize}\quad\quad f(\boldsymbol{x})\\ \text{s.t.}\quad\quad\quad \boldsymbol{h}(\boldsymbol{x})\boldsymbol{o} \end{cases}\quad\quad(1) {minimizef(x)s.…...

每日OJ_牛客_骆驼命名法(递归深搜)
目录 牛客_骆驼命名法(简单模拟) 解析代码 牛客_骆驼命名法(简单模拟) 骆驼命名法__牛客网 解析代码 首先一个字符一个字符的读取内容: 遇到 _ 就直接跳过。如果上一个字符是 _ 则下一个字符转大写字母。 #inclu…...
MySQL 数据库管理与操作指南
文章目录 MySQL 数据库管理与操作指南1. 忘记 MySQL 密码的处理方法2. MySQL 数据库备份与恢复2.1 数据库备份2.2 数据库恢复 3. MySQL 用户与权限管理3.1 创建用户与授权3.2 查看所有用户3.3 删除用户 4. 关闭 GTID 复制模式5. 查看数据表的存储引擎5.1 查看 MySQL 支持的存储…...
Android Manifest 权限描述大全对照表
115工具网(115工具网-一个提供高效、实用、方便的在线工具集合网站)提供Android Manifest 权限描述大全对照表,可以方便andriod开发者查看安卓权限描述功能 权限名称描述android.permission.ACCESS_CHECKIN_PROPERTIES访问登记属性读取或写入…...

Ollama Qwen2 支持 Function Calling
默认 Ollama 中的 Qwen2 模型不支持 Function Calling,使用默认 Qwen2,Ollama 会报错。本文将根据官方模板对 ChatTemplate 进行改进,使得Qwen2 支持 Tools,支持函数调用。 Ollama 会检查对话模板中是否存在 Tools,如…...
APP测试工程师岗位面试题
一、你们公司研发团队采用敏捷开发模式的原因? 由于版本节奏比较快,开发与测试几乎并行,一个版本周期内会有两版在推动,也就是波次发布,波次发布用于尝试新加入的功能,做小范围快速的开发,验证…...

如何进行 AWS 云监控
什么是 AWS? Amazon Web Services(AWS)是 Amazon 提供的一个全面、广泛使用的云计算平台。它提供广泛的云服务,包括计算能力、存储选项、网络功能、数据库、分析、机器学习、人工智能、物联网和安全。 使用 AWS 有哪些好处&…...

第十六篇:走入计算机网络的传输层--传输层概述
1. 传输层的功能 ① 分割与重组数据 一次数据传输有大小限制,传输层需要做数据分割,所以在数据送达后必然也需要做数据重组。 ② 按端口号寻址 IP只能定位数据哪台主机,无法判断数据报文应该交给哪个应用,传输层给每个应用都设…...

提升效率!ArcGIS中创建脚本工具
在我们日常使用的ArcGIS中已经自带了很多功能强大的工具,但有时候遇到个人的特殊情况还是无法满足,这时就可以试着创建自定义脚本工具。 一、编写代码 此处的代码就是一个很简单的给图层更改别名的代码。 1. import arcpy 2. input_fc arcpy.GetParam…...

无人机之报警器的作用
一、紧急救援与辅助搜救 紧急救援:在事故或紧急情况下,无人机报警器可以迅速发出警报,指引救援人员前往事故地点,提高救援效率。 辅助搜救:无人机搭载报警器可以辅助寻找失踪人员或其他需要搜救的场景,通…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...