HTTPS协议,看这篇就够了
不安全的HTTP
近些年来,越来越多的网站使用 HTTPS 协议进行数据传输,原因在于 HTTPS 相较于 HTTP 能够提供更加安全的服务。
很多浏览器对于使用 HTTP 协议的网站会加上『警告』的标志表示数据传输不安全,而对于使用 HTTPS 协议的网站会加上一把『锁』标志表示数据传输安全。
为什么 HTTP 协议不安全呢?主要表现在以下三个方面:
- 容易被窃听:HTTP 传输的数据是明文。黑客很容易通过嗅探技术截获报文,由于数据没有加密,内容可以被黑客所理解。举个例子:如果用户输入密码取款,那么黑客窃听了此密码后,就可以为所欲为了!
- 容易被篡改:黑客可以在截获 HTTP 报文后,对报文进行修改,然后再发送到目的地。举个例子:如果用户想要转账给家人,而黑客将收款人修改成了自己,将会造成用户出现损失!
- 容易被伪造身份:黑客可以伪造 HTTP 报文,假装自己是用户真正想要访问的网站,然后与用户进行通信。举个例子:如果用户想要访问淘宝网站进行购物,而黑客冒充自己是淘宝网站,用户就可能在此假淘宝网站上买东西,造成损失!
HTTPS 是如何解决以上安全性问题的呢?主要方法如下所示:
- 数据加密:HTTPS 传输的不再是明文,而是采用加密算法传输密文,黑客即使截获了报文,也无法理解内容!
- 完整性摘要:HTTPS 通过摘要算法得到报文的一个摘要,如果黑客篡改了报文内容,那么重新生成的摘要将发生变化,接收方校验后就知道数据不再完整,被篡改了!
- 数字证书:HTTPS 通过数字证书来验证通信实体的身份,而黑客因为没有相应的证书,一旦冒充其他网站将会被识破!
加密算法
为了防止传输数据被黑客所窃听,客户端与服务器之间需要对数据进行加解密处理。
发送方使用加密算法将明文加密为密文,而接收方使用相应的解密算法将密文解密为明文。黑客只能看到密文,因而并不能获取到任何有用信息。如下图所示:
一般来说,加密算法分为两大类,对称加密和非对称加密。
- 对称加密:指加密和解码使用同一把密钥,即图中的密钥 A 等于密钥 B;
- 非对称加密:指加密和解密使用不同的密钥,即图中的密钥 A 不等于密钥 B。
对称加密
对称加密算法中加密和解密的钥匙是同一把,称之为密钥。
凯撒密码是一种较为简单的对称加密算法,可用于对英语文本进行加解密。其主要思想是:将明文中的每个字母按照字母表所在位置右移 K 位,得到密文(允许回绕)。
举个例子,设 K = 2,那么明文中的字母 “a” 用字母 “c” 代替,字母 “z” 用 字母 “b” 代替。此时 K = 2 就是对称加密算法中的密钥。
这种方式的缺点在于:每个字母经过加密后只有唯一的密文表示,如果黑客收集了很多数据后进行统计分析,很可能就破解了加密手段。
更好的方式是采用多个凯撒密码 K 轮询进行加密,比如位置为奇数的字母采用密钥 K = 2 加密,位置为偶数的字母采用密钥 K = 3 加密。
然而凯撒密码只能加密英文文本,若想要加密所有字符,可以采用分组加密的方式。
我们知道任何数据在计算机中实际存储的是 0/1 比特的组合。分组加密的主要思想是:将要加密的报文处理为 K 比特的分组,每个分组通过一对一的映射表进行加密。
举个例子,设 K = 3,映射表如下图,那么报文 010110001111 将会被加密为 101000111001。此时 K=3 以及映射表就是对称加密算法中的密钥。
与前面采用多个凯撒密码 K 作为密钥的方式一样,为了增加破解的难度,一种更好的方式是采用多个映射表,轮询对数据进行加密。
计算机网络中常用的对称加密算法有:DES、3DES、AES 等,都属于分组加密算法。
非对称加密
非对称加密算法中加密和解密的钥匙不同,分别称为公钥和私钥。其特点在于:
- 如果用公钥加密,则只能用私钥解密,此时公钥是不能解密的。
- 如果用私钥加密,则只能用公钥解密,此时私钥是不能解密的。
- 公钥是对外公开的,任何人都能够得到;私钥只有自己知道,不能泄露。
为什么有了对称加密后还会出现非对称加密呢?
原因在于对称加密的前提是通信双方需要商量出一个密钥,而商量密钥的时候传输的是明文,如果此密钥被黑客所截获,即使后面的报文进行了加密,黑客也可以通过此密钥进行解密!
非对称加密的一个特点是:公钥加密,只有私钥可以解密。那么就无需像对称加密那样提前协商好密钥。通信双方可以直接将自己的公钥发送给另一方,这个公钥即使黑客知道也无所谓,当一方用此公钥加密后,即使黑客截获了报文,也无法用公钥解密,只有拥有私钥的另一方才能解密成功!
计算机网络中常用的非对称加密算法有:RSA、 ECDHE 等。
相较于对称加密,非对称加密算法更加复杂难懂,数学推理较多,如果对具体算法感兴趣的,可以看一下阮一峰的两篇文章:RSA 算法原理(一)和 RSA 算法原理(二)。
https://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html
http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html
混合加密
前面提到,对称加密算法需要提前协商出密钥,而协商的过程用的是明文(因为还没有密钥),如果黑客截获了明文密钥,那么之后即使加密了,黑客也可以用密钥进行解密,此时就无安全性可言了!
非对称加密算法解决了此问题,但是其存在大量的指数运算,加密速度非常慢!而对称加密算法的加密速度非常快,一般是非对称加密算法的 100-10000 倍!
那能不能将二者综合起来,使得数据传输不仅安全且高效呢?答案是肯定的!HTTPS 采用混合加密方式,既采用对称加密,也采用非对称加密。
对称加密算法的弱点在于协商密钥的过程采用明文不安全,存在密钥泄漏的可能,那么我们是不是可以不采用明文,而是采用非对称加密算法来协商此密钥,之后传输数据时再采用对称加密算法进行加密。
也就是说,**用非对称加密算法传输密钥,用对称加密算法传输实际数据。**此密钥一般称为『会话密钥』。
- 会话密钥通过非对称加密算法传输,非常安全;
- 大量数据通过对称加密算法传输(多次),会话密钥只需要传一次,非常高效!
摘要算法
摘要算法也称为哈希算法,其输入为任意数据,输出为固定长度的字符串(称为摘要)。主要特点如下:
- 不可逆,即无法通过输出反推输入。
- 相同的输入必会产生相同的输出。
- 不同的输入大概率会产生不同的输出。
- 无论输入的数据有多长,输出摘要的长度固定不变。
举个例子:如果将数据的比特流每 8 个比特进行分组(不足的补零),然后将所有分组进行按位异或运算,那么生成的结果就可以称为摘要,此算法就是一种简单的摘要算法。
如果两个输入数据经过摘要算法得到的输出摘要一致,则称为出现了哈希碰撞。一个好的摘要算法出现哈希碰撞的概率非常低,而且非常难以通过输出猜测输入的内容!
计算机网络中常用的摘要算法有:MD5、SHA-1、SHA-256 等。
为了防止传输数据被黑客所篡改,发送方除了发送实际数据外,还利用摘要算法得到数据的一个摘要,并将此摘要一并发送。
接收方收到数据后,利用同样的摘要算法再次得到数据的摘要,并将其与发送方发送的摘要进行比对校验,如果二者不一致,则说明数据被篡改了,反之则没有。
小伙伴们很容易看出来上述方式存在明显缺陷,如果黑客不仅篡改了数据,而且同时篡改了摘要,接收方不就无法判断数据是否被篡改了吗?
为了防止这种情况的发生,发送方与接收方必须有一个只有二者知道的,而黑客不能知道的东西,比如对称加密的会话密钥。不过为了提升安全性,此时一般不使用会话密钥,而是使用一个新的密钥,称之为鉴别密钥,这个密钥的获取同会话密钥。
有了鉴别密钥后,摘要算法的输入就不仅仅是传输数据了,而是传输数据和鉴别密钥!黑客由于不知道鉴别密钥,就无法再伪造输入,篡改的摘要也就不正确了,从而保证了安全性!
数据和鉴别密钥级联后经过摘要算法所生成的摘要有个专用名字,称为报文鉴别码,简称 MAC。
为了进一步提升安全性,实际上客户端和服务器将使用不同的会话密钥和鉴别密钥,也就是一共需要四个密钥:
- 用于从客户端发送到服务器的数据的会话密钥;
- 用于从服务器发送到客户端的数据的会话密钥;
- 用于从客户端发送到服务器的数据的鉴别密钥;
- 用于从服务器发送到客户端的数据的鉴别密钥。
数字证书
前面提到 HTTPS 采用非对称加密算法传输会话密钥。一般是服务器将公钥对外公布,客户端利用此公钥加密会话密钥,然后服务器通过私钥解密得到会话密钥,此时双方即协商好了用于对称加密传输数据的密钥。
但是万一服务器的公钥是被黑客伪造的呢?比如经典的『中间人攻击』问题:
- 客户端发送的请求被中间人(黑客)劫持(如使用 DNS 劫持),所有请求均发送至中间人。
- 中间人假装自己是正规网站(服务器),向客户端返回自己的公钥 2 ,并索要正规网站的公钥 1。
- 客户端使用中间人的公钥 2 加密会话密钥1,并发送至中间人。
- 中间人使用自己的私钥 2 解密得到会话密钥1,同时假装自己是客户端,使用正规网站的公钥 1 加密会话密钥2(可以与会话密钥 1 相同)并发送至正规网站。
- 客户端使用会话密钥1对数据进行加密,并发送至中间人。
- 中间人使用会话密钥1对数据进行解密,得到明文数据!(实现了窃听)
- 中间人使用会话密钥2对数据(可能是篡改的)进行加密,并发送至正规网站。
此时,客户端与服务器的通信再无安全性可言!中间人不仅能够窃听到消息内容,还能够进行篡改!
客户端如何知道自己所拥有的公钥是来自于正规网站而不是中间人呢?这时候就需要数字证书了!
数字证书的概念就像是我们的身份证一样,专门用于验证通信实体的身份。咱们的身份证是去派出所申请的,而数字证书则需要向认证中心(Certification Authority,CA)申请,而且是需要收费的!
通过数字证书解决中间人攻击的具体过程为:
- 服务器(正规网站)首先生成一对公钥和私钥,然后将域名、申请者、公钥(注意不是私钥,私钥是无论如何也不能泄露的)等信息整合在一起,生成 .csr 文件,并将此文件发给认证中心 CA。
- CA 收到申请后,会通过各种手段验证申请者的信息,如无异常,则使用摘要算法得到 .csr 中明文信息的一个摘要,再用 CA 自己的私钥对这个摘要进行加密,生成一串密文,密文也称为数字签名。数字证书即包含此数字签名和 .csr 中明文信息。CA 把这个证书返回给申请人。
- 为了防止中间人攻击,客户端要求服务器发送其证书,并进行验证。
- 客户端在验证证书时,把证书里的签名与及明文信息分别取出来,然后会**用自身携带的 CA 机构的公钥去解密签名,得到摘要 1,再利用摘要算法得到明文信息的摘要 2,对比摘要 1 和摘要 2,如果一样,说明证书是合法的,也就是证书里的公钥是正确的,否则说明证书不合法。 **
浏览器如何得到认证中心的公钥呢?万一此公钥是被伪造的呢?为了防止套娃,实际电脑操作系统中会内置这些认证中心的公钥!因而无需担心认证中心公钥被伪造的问题。
Chrome 浏览器一旦发现一个网站数字证书无效,就会生成如下界面进行提示,如果用户强制访问,则存在一定的风险。
SSL/TLS 握手
根据前面所述,进行一下小结:
- HTTPS 通过混合加密算法解决 HTTP 传输数据容易被窃听的问题,此过程需要协商会话密钥。
- HTTPS 通过摘要算法解决 HTTP 传输数据容易被篡改的问题,此过程需要协商鉴别密钥。
- HTTPS 通过数字证书解决 HTTP 协议中身份容易被伪造的问题,此过程需要客户端验证服务器的证书。
那么 HTTPS 具体是怎么做的呢?通信双方在什么时候协商会话密钥和鉴别密钥、什么时候验证证书合法性的呢?答案是 SSL/TLS 协议握手的时候。
HTTPS 比 HTTP 多的那个『S』就是指 SSL/TLS 协议。
在 HTTPS 协议中,当客户端与服务器通过三次握手建立 TCP 连接之后,并不会直接传输数据,而是先会经过一个 SSL/TLS 握手的过程,用于协商会话密钥、鉴别密钥以及验证证书等,之后就可以安全传输数据了!
下面通过 Wireshark 抓包,具体讲一下 SSL/TLS 1.2 四次握手的过程。
第一次握手
客户端向服务器发起加密通信请求 ,内容主要包括:
- 客户端支持的 SSL/TLS 协议版本,如 TLS 1.2 版本。
- 客户端生产的随机数 1,用于后续生成会话密钥和鉴别密钥。
- 客户端支持的密码套件列表,每个密码套件包含:
- 用于传输会话密钥的非对称加密算法,如 ECDHE、RSA;
- 用于验证数字证书的非对称加密算法,如 ECDHE、RSA;
- 用于传输数据的对称加密算法,如 AES_128_GCM、AES_128_CBC;
- 用于验证报文完整性的摘要算法,如 SHA256、SHA384;
- 格式为:TLS_非对称加密算法_非对称加密算法_对称加密算法_摘要算法,如果两个非对称加密算法一致,可省略不写。
第二次握手
服务器收到客户端加密通信请求后,向客户端发出响应,内容主要包括:
- 确认的 SSL/ TLS 协议版本,如果双方支持的版本不同,则关闭加密通信。
- 服务器生产的随机数 2,用于后续生成会话密钥和鉴别密钥。
- 确认的密码套件,如 TLS_RSA_WITH_AES128_CBC_SHA。
- 服务器的数字证书。
第三次握手
客户端收到服务器的回应之后,会验证其数字证书是否合法(验证方法在数字证书小节中有说明),如果证书合法,则进行第三次握手,内容主要包括:
- 客户端生产的另一个随机数 3(称为前主密钥,Pre-Master Secret,简写为 PMS),此随机数会被服务器公钥加密。客户端根据随机数 1、随机数 2 以及前主密钥计算出主密钥(Master Secret,MS),接着将主密钥切片得到两个会话密钥和两个鉴别密钥。
- 加密通信算法改变通知,表示之后数据都将用会话密钥进行加密。
- 客户端握手结束通知,表示客户端的握手阶段已经结束。客户端会生成所有握手报文数据的摘要,并用会话密钥加密后发送给服务器,用来供服务端校验。
第四次握手
服务器收到客户端的消息后,利用自己的私钥解密出前主密钥,并根据随机数 1、随机数 2 以及前主密钥计算出主密钥,接着将主密钥切片得到两个会话密钥和两个鉴别密钥。
之后进行第四次握手,内容主要包括:
- 加密通信算法改变通知,表示之后数据都将用会话密钥进行加密。
- 服务器握手结束通知,表示服务器的握手阶段已经结束。服务器会生成所有握手报文数据的摘要,并用会话密钥加密后发送给客户端,用来供客户端校验。
至此,整个 SSL/TLS 的握手阶段全部结束!
为什么第三、第四次握手要发送所有握手报文的摘要呢?
主要原因是防止握手信息被篡改。比如客户端支持的密码套件列表中,有些加密算法较弱,有些加密算法较强,而此密码套件是明文传输的,万一黑客将此密码套件列表进行了修改,只留下一些安全性较低的加密算法,那么服务器就只能从这些安全性较低的加密算法中选择,安全性大大降低。因此需要通过发送摘要的形式防止握手信息被篡改。
为什么不直接发送一个主密钥,而是用两个随机数加一个前主密钥重新生成一个主密钥呢?
主要原因是防止连接重放。如果没有前面两个随机数,仅仅由客户端生成一个主密钥,并通过服务器公钥加密发送给服务器。那么黑客在嗅探了服务器与客户端之间的所有报文后,可以再次冒充客户端向服务器发送相同的报文(虽然黑客不知道内容是什么),因为报文信息都是之前客户端和服务器验证过的,因此服务器会认为是客户端与其通信,导致又一次连接。
假如服务器是一个购物网站,那么此连接重放会导致客户端再一次下单,造成损失。
而如果有了前两个随机数,即使黑客冒充客户端想要连接重放,然而由于随机数不同,生成的密钥则不同,黑客重新发送的内容将失效(服务器不能理解、完整性摘要也不对)。
最后,用一张图总结 TLS 四次握手的过程。
相关文章:

HTTPS协议,看这篇就够了
不安全的HTTP 近些年来,越来越多的网站使用 HTTPS 协议进行数据传输,原因在于 HTTPS 相较于 HTTP 能够提供更加安全的服务。 很多浏览器对于使用 HTTP 协议的网站会加上『警告』的标志表示数据传输不安全,而对于使用 HTTPS 协议的网站会加上…...

C语言学习之路--结构体篇
目录一、前言二、结构体的声明1、结构的基础知识2、结构的声明3、结构体成员的类型4、结构体变量的定义和初始化三、结构体成员的访问四、结构体传参一、前言 本人是一名小白,这一篇是记录我C语言学习中的结构体的所学所得,仅为简单的认识下C语言中的各…...

【LINUX】初识文件系统
文章目录一、前言二、回顾C语言文件操作三、初识系统调用openreadwriteclose四、文件系统初识五、结语一、前言 二、回顾C语言文件操作 int main() {FILE* fp fopen("log.txt", "w");if (fp NULL){perror("fopen");}int cnt 0;fputs("…...

金三银四Java面试题及答案整理(2023最新版) 持续更新
作为一名优秀的程序员,技术面试是不可避免的一个环节,一般技术面试官都会通过自己的方式去考察程序员的技术功底与基础理论知识。 如果你参加过一些大厂面试,肯定会遇到一些这样的问题: 1、看你项目都用的框架,熟悉 …...
7个角度,用 ChatGPT 玩转机器学习
大家好,我是机器学习科普创作者章北海mlpy,探索更高效的学习方法是我一直等追求。现在的初学者太幸福了,可以利用ChatGPT来帮助你学习机器学习的各个方面。 比如【个人首测】百度文心一言 VS GPT-4这篇文章中,我就用文心一言、GP…...

关于多层板,你了解多少?
01 前言 大家好,我是张巧龙。好久没写原创了,记得之前刚接触PCB时,还在用腐蚀单层板,类似这种。 慢慢随着电子产品功能越来越多,产品越来越薄,对PCB设计要求越来越高了,复杂程度也随之增加。因此…...
使用sqlalchemy-gbasedbt连接GBase 8s数据库
测试环境: 操作系统:CentOS 7.9 64-bit数据库版本:GBase8sV8.8_AEE_3.0.0_1,对应的CSDK版本为3.0.0_1 1,确认安装python3 确认已经安装python3和python3-devel [rootlocalhost test]# python3 -V Python 3.6.8如果…...
前端如何丢掉你的饭碗?
对于后端而言,我们常有“删库跑路”的说法,这说明后端的操作对于信息系统而言通常影响很大,可以轻易使信息系统宕机、崩溃,直接导致项目失败。所以,不要去逼后端程序员! 作为前端程序员,我们似…...

栈、队列、优先级队列的模拟实现
优先级队列的模拟实现栈stack的模拟实现push()pop()top()size()empty()swap()stack总代码队列queue的模拟实现push()pop()front()back()empty()size()swap()queue总代码优先级队列(堆)push()pop()top()empty()size()swap()priority_queue总代码deque的了解栈 在CSTL中栈并不属…...

JMM内存模型
JMM内存模型JMM内存模型定义三大特性原子性可见性有序性volatile语义JMM规则操作系统实现术语缓存一致性要求缓存一致性机制写传播事务串行化重排序as-if-serial 语义(像是有序的)happens-before 原则happens-before 原则的八大子原则内存屏障总结finalf…...

Linux- 系统随你玩之--玩出花活的命令浏览器-双生姐妹花
文章目录1、背景2、命令浏览器-双生姐妹花2.1、姐妹花简介2.2 、验名正身2.3、常用功能选项3、常用实操3.1、发送请求获取文件3.1.1、抓取页面内容到一个文件中3.1.2、多个文件下载3.1.3、下载ftp文件3.1.4、断点续传3.1.5、上传文件3.1.6、内容输出3.2 、利用curl测试接口3.3 …...

【深度学习】基于Hough变化的答题卡识别(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳座右铭&#…...

Linux - 进程控制(创建和终止)
1.进程创建fork函数初识 在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。返回值:子进程返回0,父进程返回子进程id,出错返回-1getpid()获取子进程id,…...

依赖注入~
依赖注入之setter注入: 依赖注入是IOC具体的一种实现方式, 这是针对资源获取的方式角度来说的,之前我们是被动接受,现在IOC具体的实现叫做依赖注入,从代码的角度来说,原来创建对象的时候需要new࿰…...

【嵌入式硬件芯片开发笔记】HART协议调制解调芯片AD5700配置流程
【嵌入式硬件芯片开发笔记】HART协议调制解调芯片AD5700配置流程 XTAL_EN接地,CLK_CFG的两个引脚由同一个GPIO控制 初始时HART_CLK_CFG输出低电平 由RTS引脚控制调制/解调。当RTS处于高电平时,为解调(输入);否则为调…...
Go语言异步下载视频
异步下载mp4视频列表 下面是一个简单的Go语言示例,用于异步下载视频。我们将使用goroutines来实现异步下载,并使用sync.WaitGroup来等待所有下载任务完成。此示例依赖于net/http包来执行HTTP请求。 package mainimport ("fmt""io"…...

前缀树(字典树/Trie) -----Java实现
目录 一.前缀树 1.什么是前缀树 2.前缀树的举例 二.前缀树的实现 1.前缀树的数据结构 1.插入字符串 2.查找字符串 3.查找前缀 三.词典中最长的单词 1.题目描述 2.问题分析 3.代码实现 一.前缀树 1.什么是前缀树 字典树(Trie树)是一种树形…...
申请专利需要具备什么条件
申请专利需要具备什么条件 在我国,如果创造出来了新的发明都可以申请专利权,一旦申请成功之后,自己的发明就受到了法律的保护,任何人不得以违法的手段进行侵犯。那么申请专利需要具备什么条件?今天律赢时代网就为大家…...

【C++】一篇带你搞懂C++“引用”
前言在C语言的学习中,并没有引用这个概念,但是在C中,加入了引用这个概念,说明引用也是很重要的,但是我们怎么理解引用呢?我是这么理解的,例如在水浒传中,108个英雄好汉都是自己的外号…...

蓝桥杯刷题冲刺 | 倒计时19天
作者:指针不指南吗 专栏:蓝桥杯倒计时冲刺 🐾马上就要蓝桥杯了,最后的这几天尤为重要,不可懈怠哦🐾 文章目录1.抓住那头牛2.排列序数1.抓住那头牛 题目 链接: 抓住那头牛 - C语言网 (dotcpp.com…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...

rm视觉学习1-自瞄部分
首先先感谢中南大学的开源,提供了很全面的思路,减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接:https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架: 代码框架结构:readme有…...

leetcode_69.x的平方根
题目如下 : 看到题 ,我们最原始的想法就是暴力解决: for(long long i 0;i<INT_MAX;i){if(i*ix){return i;}else if((i*i>x)&&((i-1)*(i-1)<x)){return i-1;}}我们直接开始遍历,我们是整数的平方根,所以我们分两…...
shell脚本质数判断
shell脚本质数判断 shell输入一个正整数,判断是否为质数(素数)shell求1-100内的质数shell求给定数组输出其中的质数 shell输入一个正整数,判断是否为质数(素数) 思路: 1:1 2:1 2 3:1 2 3 4:1 2 3 4 5:1 2 3 4 5-------> 3:2 4:2 3 5:2 3…...