网络安全协议系列

news2024/9/20 15:07:18

目录

一、安全协议的引入

1.TCP/IP协议族中普通协议的安全缺陷

1.信息泄露

2.信息篡改

3.身份伪装

4.行为否认

2.网络安全需求

二、网络安全协议的定义

三、构建网络安全协议所需的组件

1.加密与解密

2.消息摘要

3.消息验证码

4.数字签名

5.密钥管理

1.建立共享密钥

2.公钥管理

四、构建一个简单的安全消息系统

五、影响网络安全协议设计的要素

1.应用的考虑

2.协议栈层次的影响

3.安全性考虑


一、安全协议的引入

信息安全包括三个分址,即存储安全、传输安全和内容安全。

通过因特网进行信息交互是当前使用非常广泛的一种信息传输方式。

传输控制协议/网际交互协议是支撑因特网运行的基础,所有通过因特网传输信息的实体都必须遵守TCP/IP协议族的各项约定,而增强协议的安全性也就显得格外重要。


1.TCP/IP协议族中普通协议的安全缺陷

网络协议是网络通信的基础,它规定了通信报文的格式、处理方式和交互时序,每一项内容都会影响通信的安全性。


1.信息泄露

在众多的网络攻击方法中,嗅探是一种常见而隐蔽的手段。攻击者可以利用这种技术获取网络中的通信数据。在共享式网络架构下,所有数据都以广播方式发送,因此仅把网卡的工作模式设置为“混杂”,就可以嗅探网段内所有的通信数据。方法这种攻击的有效途径之一就是采用交换式网络架构,因为交换机具有“记忆”功能。它把每个端口与该端口所连设备的物理地址进行绑定,并依据帧首部的“目标地址”把数据直接发送到相应端口,抛弃了共享环境下的广播方式。从防嗅探的角度看,交换式网络环境似乎优于共享环境,但网络协议的设计缺陷却给它带来了另一种风险。ARP欺骗是攻击者在交换式网络环境下实施嗅探的基础。

2.信息篡改

从网络攻击的角度看,目前一种常用的攻击手段就是在截获的数据中插入一段恶意代码,以实现木马植入和病毒传播的目的。

3.身份伪装

ARP欺骗、IP欺骗——在IP进行身份伪装(攻击者故意更改IP数据报的源地址,以达到隐藏攻击源和实施拒绝服务攻击的目的)、DNS(域名服务器)欺骗——在应用层进行身份伪装(攻击者有可能篡改域名与IP地址的映射关系,将用户引向恶意的IP地址)

4.行为否认

行为否认是指数据发送方否认自己已发送数据,或者接收方否认自己已收到数据的行为。IP欺骗可以看作发送方行为否认的一个例子,即发送方用伪造的IP地址发送信息进而隐藏自己的身份。在电子商务应用领域,行为的不可否认性是必须的要求。


2.网络安全需求

按照信息保障技术框架(IATF)的定义,将网络安全需求分为以下5种:

①机密性 即防止数据的未授权公开,也就是要让消息对无关的听众保密。

②完整性 即防止数据被篡改,确保接收者收到的消息就是发送者发送的消息。

③可控性 即限制对网络资源(硬件或软件)和数据(存储和通信)的访问,其目标是阻止未授权使用资源、未授权公开或修改数据,其要素依次包括:标识和鉴别、授权、决策以及执行。访问控制的基本思路是赋予每个通信实体唯一的标识及相应的访问权限。在实施通信时,首先确认实体的身份,之后执行相应的访问控制策略。

④不可否认性 即通信实体需要对自己的行为负责,做过的事情不能抵赖。它包含了两层含义,一是发送者不能否认自己发送数据的行为,二是接收者不能否认自己接收过数据的行为。

⑤可用性 即合法用户在需要使用网络资源时,能够获取正常的服务。DoS攻击就是典型的破坏可用性的例子。

这5种安全需求种,可用性的实现往往依赖其他4种特性得以满足。


嗅探破坏了数据机密性,恶意代码注入破坏了数据完整性,ARP欺骗、IP欺骗和DNS欺骗破坏了可控性,IP欺骗同时破坏了不可否认性。事实上,任意一种攻击方法都可以看作对上述5种安全需求的破坏。因此,解决安全问题的过程可以归结为满足上述安全需求的过程。

为满足上述安全需求,可以给出多种防护技术和方案。比如,防火墙可提供控制性保护,杀毒软件可提供完整性保护,但密码学却可以为满足上述各种安全需求提供通用的基础。


二、网络安全协议的定义

网络安全协议可定义为基于密码学的通信协议。这个定义包含以下两层含义:

1.网络安全协议以密码学为基础;

2.网络安全协议也是通信协议。

第一层含义体现了网络安全协议与普通网络协议之间的差异。网络安全协议之所以能够满足机密性和完整性等安全需求,完全依托于密码技术。在发送数据之前,网络安全协议要对数据进行加密处理以保证机密性,计算消息验证码(MAC)以确保完整性;收到数据后,则要进行解密处理并检查消息验证码的正确性。

第二层含义体现了网络安全协议与普通网络协议之间的共性。协议三要素包括语法、语义和时序。语法规定了协议报文的格式,语义规定了报文的处理方法,时序则规定了通信双方交换报文的顺序。


在使用密码学技术时,以下两个要素不可或缺,一是算法,二是密钥。这种设计理念体现了三点优势,一是灵活性,二是兼容性,三是协议之间的互操作性。


三、构建网络安全协议所需的组件

1.加密与解密

加密是保障数据机密性的基本手段,解密是其逆过程。公钥密码算法:通信双方将各自的公钥告知对方,那么在给对方发送数据时,就可以用对方的公钥进行加密以保障数据机密性。对方收到数据后,可以用自己的私钥解密。

从密钥交互和保密的角度看,公钥密码体制要优于对称密码体制。但在保障数据机密性时,对称密码体制仍然被广泛应用,原因之一就是对称密码算法的效率要高于公钥密码算法。

2.消息摘要

一段数据的摘要是表征该数据特征的字符串,获取数据摘要的功能通常由散列函数(Hash)函数完成。散列函数可以接收任意长度的数据,并产生定长的散列值,数学表达式为

h=H(M)

其中M是任意长度的明文,H是散列函数,h是M在H的作用下得到的散列值。散列函数是一种压缩映射过程,即散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一地确定输入值。


摘要是验证数据完整性地基础:在发送数据地同时可以附加其摘要,接收方收到数据后利用同一散列函数计算数据摘要,并把它和收到地摘要值比较,若相同,则说明数据未被更改;若不同,数据完整性被破坏。上述过程仅用于检测由于硬件失效或软件错误所产生地传输错误时是有效的,但却无法应对恶意攻击。

用于信息安全领域的散列函数应满足一下三个特性:

①映射分布均匀性和差分分布均匀性;

②单向性;

③抗冲突性;

在选择摘要值长度时的限定性因素通常是抵御冲突的强度,而不是满足单向性的强度。

3.消息验证码

消息验证码与完整性校验值(ICV)的含义相同,它是基于密钥和消息摘要所获得的一个值,可用于数据源发认证和完整性校验(这两项功能通常被认为是认证功能)。

在发送数据之前,发送方首先使用通信双方协商好的散列函数计算其摘要值。在双方共享的会话密钥作用下,由摘要值获得消息验证码。之后,它和数据一起被发送。接收方收到报文后,首先利用会话密钥还原摘要值,同时利用散列函数在本地计算所收到数据的摘要值,并将这两个值进行对比。如果二者相等,则报文通过认证,因为在会话密钥不泄露的前提下,这个结果验证了以下两个事实:

①数据确实会用会话密钥加密。由于这个密钥仅为通信双方拥有,因此可验证数据确实由发送发发出。

②消息验证码是消息摘要经过密钥处理后所得,被更改后仍然可用密钥还原得到原始摘要值得概率很低。摘要携带了数据得特征信息,因此,若还原后得摘要值于本地计算得到得摘要值相等,则可以认为数据未被更改。

消息验证码有两种计算方式,一种是利用已有得加密算法,比如用数据加密标准(DES)等直接对摘要值进行加密处理;另一种是使用专门得MAC算法。目前,信息安全领域普遍认同的算法是哈希运算消息认证码(HMAC),它基于MD5或者SHA-1,在计算散列值时将密钥和数据同时作为输入,并采用了二次散列迭代的方式,实际的计算方法如下:

HMAC(K,M)=H(Kopad|H(Kipad|M))

其中,K是密钥,长度为哈希函数所处理的分组尺寸。对于MD5和SHA-1而言,长度为64B;对于SHA-384和SHA-512而言,长度为128B。若密钥长度小于这个要求,则自动在密钥后用“0”填充补足。M是消息;H是散列函数;opad和ipad分别是由若干个0x5c和0x36组成的字符串;表示异或运算,|表示连接操作。


4.数字签名

数字签名通常用于确保不可否认性,它的原理与消息验证码类似,因此也具备认证的功能。数字签名也基于信息摘要,它与消息验证码的不同之处在于后者使通信双方共享的会话密钥处理摘要,数字签名则是使用发送方的私钥加密摘要。接收方在验证数字签名时,须利用发送方的公钥进行解密。 常用的数字签名算法是DES和RSA。DSA是专门用于计算数字签名的算法,它被美国国家标准局作为数字签名标准(DSS)。RSA则即可用于数据加密,也可用于计算签名。

5.密钥管理

1.建立共享密钥

通信双方获取密钥可以使用多种方式,比如通信的某一方生成密钥后可使用电话、人员等“外带”.(Out-of-Band)方式传递给另一方。以下为三种基于网络传输的密钥确立法。

1.基于可信第三方

在讨论密钥生成时,可信第三方通常是指密钥分发中心(KDC)。

2.密钥协商方式

密钥协商的思想是通信双方交换生成密钥的素材,并各自利用这些素材在本地生成共享密钥。密钥协商算法被设计为即便攻击者或得了这些素材,也无法生成密钥。

最为知名的密钥协商算法就是D-H交换,它的设计基于计算离散对数的困难性。通信双方在计算共享密钥时,除了各自提供的密钥素材,还要使用各自的私钥和对方的公钥。D-H使用模幂运算,通信双方共享模数p和发生器g,其中p是一个大素数,g则满足一下条件:对于任意数Z<p,存在W,使得g^{w}mod p = Z。因此,可以产生从1到p-1的所有数字。设X<p,计算Y = g^{x} mod p,最终X被作为私钥,Y被作为公钥。

3.密钥传输方式

密钥传输的核心思想是由通信一方生成共享密钥,并通过某种途径将该密钥传递到通信对等端。使用这种方式,必须保证传输过程的安全。较为常用的解决方案是利用公钥密码体制保护共享密钥。通信的一方生成共享密钥后,用对方的公钥进行加密并传递。对方利用其私钥解密该数据,从而实现密钥的共享。该过程较为直观,但提前是必须事先获取对等端的公钥,这就涉及公钥管理问题。

2.公钥管理

必领将公钥告知通信对等端,但直接通过网络将公钥发送给对等端可能会遭受“中间人政击”。

在Alice向Bob发送自己的公钥时,攻击者截获这个公钥,并把自己的公钥发送给Bob,反之亦然。这样,攻击者获得了通信双方的公钥,而通信对等端获得的都是攻击者的公钥,他们对此却并不知情。随后Alice向Bob发送数据时,使用攻击者的公钥加密,攻击者用自己的私钥解密还原数据后,再用Bob的公钥加密发送给Bob,反之亦然。最终,即便数据进行了加密处理,攻击者也能截获Alice和Bob的所有通信数据,而二者都无法发现这一行为。


事实上,公钥的分发与传递使用证书。数字证书系统的构建基于称为证书授权中心(Certificate Authority,CA)的可信第三方,该方负责证书的颁发、管理、归档和撤销。数字证书是一段数据,它包含了两个关键字段,即证书所有者的公钥以及颁发该证书的CA用自己私钥对证书所做的签名。

中间人攻击的实质是对公钥信息进行了更改,因此防止该攻击的核心就是要能够验证公钥信息的完整性,数字签名恰恰具备了这一特性。由于证书中的签名使用了颁发者的私钥,实施完整性验证时就必须要获取该颁发者的公钥。这个密钥的获取可采用多种途径,比如人员、光盘等带外方式。CA的公钥也可以通过证书方式发布,在软件发布和安装时,通常会在系统中安装一些默认的可信CA证书信息。


在证书的使用过程中,证书撤销也是一项重要功能。若某个实体的密钥泄露,它必须通过某种方式告知其他实体这个公钥以及相应的证书已经无效,实现这目标需要证书撤销列表(Certificate Revocation List,CRL)。CRL是一个经过签名的、标有日期的、包含所有已撒销证书的列表,表中的证书已经失效。引人CRL后,在验证某个证书的有效性时,除了验证证书的签名,还必须查看该证书是否出现在CRL中。

CA会定期公布CRL,这意味着两次CRL发布之间存在一个安全“空隙”。在这段时间内,密钥可能已经被攻破,但用户无法得知。除了CRL,用户也可以使用联机证书状态协议(Online Certificate Status Protocol,OCSP)联机获取最新的证书状态。利用该协议,用户可以向CA请求指定证书的状态,CA则提供包含自己签名的应答。

四、构建一个简单的安全消息系统

基于上述各种组件可以构建各种安全消息系统。比如,若Alice要和Bob通信,他们可以首先获取对方的证书并进行验证。在发送数据时,他们可以用对方的公钥加密数据,并将签名附加在数据后一起发送,以保障数据的机密性、完整性、不可否认性,同时可由接收方进行数据源发认证。这种方案提供了各类安全服务,但由于利用公钥密码算法处理数据效率较低,这种方案会影响通信效率,在实时性要求较高的场合并不适合。

一种更为高效的方案是使用对称密码算法对通信数据进行安全处理,并依托公钥密码体制中的相关技术生成或保护对称密码算法所需的共享密钥。如下图所示是这种方案的一个示例,它采用了密钥传输方式生成共享密钥。

Alice向Bob发送数据之前,首先计算数据的摘要,并用自己的私钥进行签名。为了让Bob能够验证签名,Alice把自己的证书也附加在数据后,以便Bob获取自己的公钥。之后,Alice生成共享的会话密钥,并用这个密钥加密数据、证书和签名。为保障共享密钥安全地传输给Bob,Alice将其用Bob的公钥加密。之后,加密的共享密钥、数据、证书和签名发送给Bob。

Bob收到数据后,首先用自己的私钥解密以获取共享密钥。之后,他利用该密钥实施解密以还原数据、证书和签名。为了验证签名,他首先提取Alice证书中包含的公钥,利用该密钥处理签名以还原摘要值,同时在本地计算数据摘要,最后将两个摘要值比对以验证数据完整性并进行数据源发认证。


使用上述方案,可以满足各类安全需求,但也忽略了几个问题:

①在Alice发送数据之前,已经默认Bob是自己预期的通信对等端,但在实际通信中往往并非如此。这个方案忽略了身份认证过程。

②Alice使用的加密算法、散列算法和签名算法必须与Bob一致,否则两者无法完成数据通信。这个方案忽略了双方如何就算法达成一致这个过程。

③数据传输时,除了数据本身,还需要附加证书和共享密钥信息。若发送单条数据,且数据尺寸较大,则这种方案的开销相对较小。反之,若数据量很小,且Alice和Bob要反复交互数据,这种方案的效率就显得低下。这种应用场景并不罕见、比如在远程控制等应用场合,控制指令可能只有1B。


提高效率的核心是将证书和密钥的传递步骤从整个通信过程中独立开来,因为数据的交互可能是频繁的,但是双方只要有一次证书和密钥的交互过程即可。在整个数据交互过程中,可以用交互后一直存储在本地的证书和密钥对数据进行安全处理。这个独立出来的过程在网络安全协议领域被称发“握手”或“协商”,它发生在应用数据交互之前、通常包含以下三大功能:

①身份认证,即互相验证对方的身份,证书是身份认证方式的一种;

②算法协商,即双方就加密、散列和签名算法达成共识;

③密钥生成,即双方就保护数据所需的共享密钥达成共识。

协商过程是网络安全协议规定的一项核心丙容。由于应用环境和协议栈层次的差异,不同的安全协议规定的协商过程都不一致。一个安全协议通常都把整个协议交互过程分为协商和数据通信两个步骤,并针对两个步骤规定了相应的语法、语义和时序,这一点在随后讨论具体的安全协议时将得到充分证明。


五、影响网络安全协议设计的要素

在规定网络安全协议的语法、语义和时序时,设计者主要从三个方面予以考虑:一是应用,二是协议栈层次,三是安全性。

1.应用的考虑

一个安全协议的提出,往往具有特定的应用背景。比如,安全套接层(SSL)的出台与网景公司密切相关,该公司的主打产品是Netscape Navigator(Web浏览器),因此它针对Web安全提出了一套解决方案,并最终成为SSL的基础。此外,著名的安全协议套件IPsec专门针对IP的安全缺陷而设计,DNS安全扩展(DNSsec)则针对DNS。

不同的应用背景对应着不同的安全需求。比如,Web访问基于客户端/服务器(C/S)模型,客户端在使用网上购物等应用时,需要向服务器提交账号、口令等敏感信息。从认证的角度看,这种场景下客户端认证服务器的身份比反方向的认证更为重要。IP层通信是一种点到点(P2P)模式,通信双方的身份认证同等重要。

网络安全协议为满足安全需求而设计,因此需求上的差异导致了协议的不同。对于上述两个例子,SSL将服务器认证作为整个协议流程中必要的一步,客户端认证可选;而在IPsec标准中,必须实现通信双方的相互认证。

应用背景的差异还会影响算法协商、认证和密钥生成方式的选取。比如,在保护Web安全时,由于同一服务器要面对成千上万不确定的客户端,无法为服务器和每个客户端都预先设置密钥,因此基于预共享密钥(通信双方通过带外等方式在正式开始通信之前预先共享一个密钥)的认证方式并不适宜。

2.协议栈层次的影响

在讨论某个协议族时,“栈”的概念尤为重要,它把所有协议按照分层结构来组织。下层协议是服务提供者,上层协议是服务使用者,下层的服务比上层更为通用。在TCP/IP协议栈中,IP处于栈的低层,所有高层协议和应用都需要使用IP提供的服务;TCP和UDP处于中间层,部分高层应用基于TCP,部分基于UDP;应用层则位于最高层,它们都为用户提供服务,但是每个服务的目标都非常明确,每个服务都不是其他服务赖以存在的基础。

与此对应,若安全协议工作在IP层,则所有高层协议和应用都可以使用其提供的服务;若是增强TCP的安全性,则仅有基于TCP的高层应用可以使用其安全服务;若安全协议工作在应用层,则必然是增强某个具体应用的安全性。简言之,安全协议工作的层次越低,它所提供的安全服务越通用。


网络安全协议在协议栈中所处的位置也影响了其部署的灵活性。在TCP/IP协议栈中,IP以及IP以下各层具备点到点特性,而传输层和物理层具有端到端特性,如下图所示。

在上图所示的拓扑结构中,主机A发往B的数据要经过两个路由器R1、R2转发。数据在A的协议栈中由应用层开始逐层向下递交,并通过网络N1投递到R1,之后在R1的协议栈中逐层向上递交。R1的IP层实施选路操作后,确定将数据投递给R2。数据在R1的协议栈中由IP层逐层向下递交,并通过网络N2投递络R2,之后由R2投递给主机B。数据在B的协议栈中逐层向上递交,最后到达应用层。在整个投递过程中,与每个设备协议栈IP层交互的都是与该设备直连的下个设备的IP层,但对传输层和应用层而言,中间的转发设备对其透明,直接交互的就是两个通信端点。


由于应用层和传输层具有端到端特性,处于这两个层次中的安全协议往往在两个通信端点上部署使用。若安全协议处于IP层,则可以在任意两个通信节点上部署。从这一点看,IP层的安全协议要比高层的更为灵活和便利。但是除了位于IP层的IPsec,TCP/IP协议族中还包含若干个实现于更高层次的安全协议。

IPsec与高层安全协议并存的另一个原因就是通信效率和容用性。安全协议依托密码学机制来满足各类安全需求,密钥及算法协商、身份认证、加解密数据及计算消息验证码等都是较为耗时的操作,安全性的增强或多或少都会牺牲通信效率并增加使用难度。IP的核心地位意味着如果要使用IPsec,所有通信数据都要经过安全处理。权衡通信效率、易用性和安全性,大多数用户都会认为对于敏感数据,安全处理是必需的,但是对于普通的Web浏览等应用,却不一定要作安全处理。


TCP/1P协议族中多种安全协议并存,用户可以根据实际需求选取适当的安全协议,甚至可以将多个安全协议结合使用来增强安全性。

下图所示为TCP/IP协议族中目前常用的安全协议以及它们与普通协议的对应关系。口令认证协议(PAP)和基于挑战的握手认证协议(CHAP)是点到点协议(PPP)使用的两种认证协议;IPsec用以弥补IP的安全缺陷:SSL、传输层安全(TLS)和Socks用于增强传输层的安全性;安全命令解释器(SSH)实现了安全的远程登录;DNSsec用以弥补DNS的安全缺陷;简单网络管理协议第三版(SNMPv3)实现网管安全;专用于隐私的邮件(PEM)和很好的隐私性(PGP)用于电子邮件安全;Kerberos则是一个基于第三方的认证协议。下图中第二层隧道协议(L2TP)同时出现在应用层和网络接口层,这是因为从协议依赖关系看,它基于UDP,其报文要封装于UDP报文中投递,所以属于应用层协议。但从设计目标看,它拓展了PPP的应用范围,实现的是网络接口层功能。

3.安全性考虑

密码算法和密钥是密码学机制的核心,密钥泄露意味着安全性的彻底丧失。通信双方经过一系列的数据交互完成算法协商、密钥生成及身份认证。这种数据交互可以通过多种方式完成,比如人工传递、电话通知、光盘分发等。通过网络传递则是一种方便而快捷的方式,网络安全协议则规定了通过网络交互数据的语法、语义和时序。

在因特网这个开放的环境中,传递这些敏感数据必须特别小心,因此安全协议的设计者必须考虑采用某种语法和时序时,是否存在泄露这些敏感数据的风险。比如,若需要保护身份信息,则身份认证先于算法协商和密钥生成的时序就不合时宜,因为在传递身份信息时,双方还没有就算法和密钥达成一致,身份信息只能以明文的形式传递。

在设计一个安全协议时,协议设计者会考虑各种可能的风险,并使用BAN逻辑、Kailar逻辑、串空间模型、黑盒测试、Casper等协议分析方法和工具,以保障协议的安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1936079.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于C#多个文本框输入的问题

&#x1f3c6;本文收录于《CSDN问答解答》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&…

堆排序基本思想以及代码实现

1、基本思想 堆排序是利用堆这种数据结构而设计的一种排序算法&#xff0c;堆排序是一种选择排序&#xff0c;它的最坏&#xff0c;最好&#xff0c;平均时间复杂度均为O(n*logn)&#xff0c;它也是不稳定排序。 堆是具有以下性质的完全二叉树&#xff1a;每个结点的值都大于或…

Vue3路由如何携带 # 路由模式选择

vue3中创建路由的时候&#xff0c;有两种可选模型 hash模式、HTML5模式、服务端渲染模式 createWebHashHistory&#xff08;hash模式&#xff09; const router createRouter({// hash模式&#xff0c;带 # 号history: createWebHashHistory(), //函数可携带参数&#xff0c;…

C++11 容器emplace方法刨析

如果是直接插入对象 push_back()和emplace_back()没有区别但如果直接传入构造函数所需参数&#xff0c;emplace_back()会直接在容器底层构造对象&#xff0c;省去了调用拷贝构造或者移动构造的过程 class Test { public:Test(int a){cout<<"Test(int)"<<…

使用Web控制端和轻量级客户端构建的开放Web应用防火墙(OpenWAF)

目录 1. 简介2. 项目结构3. Web控制端3.1. 功能概述3.2. 审计&#xff08;攻击&#xff09;日志查看3.3. 多个WAF的集中监控和操作3.4. 使用socket进行封装3.5. 日志的高效存储和检索&#xff08;Redis&#xff09; 4. 轻量级客户端4.1. 功能概述4.2. 对Web程序的防护4.3. 网络…

36.UART(通用异步收发传输器)-RS232(3)

&#xff08;1&#xff09;串口发送模块visio视图&#xff1a; &#xff08;2&#xff09;串口发送模块Verilog代码: /* 常见波特率&#xff1a; 4800、9600、14400、115200 在系统时钟为50MHz时&#xff0c;对应计数为&#xff1a; (1/4800) * 10^9 /20 -1 10416 …

鸿蒙语言基础类库:【@system.vibrator (振动)】

振动 说明&#xff1a; 本模块首批接口从API version 4开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。从API Version 8开始&#xff0c;该接口不再维护&#xff0c;推荐使用新接口[ohos.vibrator]。该功能使用需要对应硬件支持&#xff0c;仅支持…

学生信息管理系统-优化版

springbootthymeleafmybatis 记录一下闲来无事&#xff0c;将之前做的1.0页面优化。 一、【管理员】首页 1、增加了【批量删除】、【导出学生信息】、【分页】、【统计及格率、平均分、优秀率】等功能。 2、将页面样式优化了一下&#xff0c;做的好看些 原来&#xff1a; 现…

.NET C# 配置 Options

.NET C# 配置 Options 使用 options 模式可以带来许多好处&#xff0c;包括清晰的配置管理、类型安全、易于测试和灵活性。但在使用过程中&#xff0c;也需要注意配置复杂性、性能开销和依赖框架等问题。通过合理设计和使用&#xff0c;可以充分发挥 options 模式的优势&#…

【链表】算法题(二) ----- 力扣/牛客

一、链表的回文结构 思路&#xff1a; 找到链表的中间节点&#xff0c;然后逆置链表的后半部分&#xff0c;再一一遍历链表的前半部分和后半部分&#xff0c;判断是是否为回文结构。 快慢指针找到链表的中间节点 slow指针指向的就是中间节点 逆置链表后半部分 逆置链表后半部分…

【JavaScript 算法】图的遍历:理解图的结构

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、深度优先搜索&#xff08;DFS&#xff09;深度优先搜索的步骤深度优先搜索的JavaScript实现 二、广度优先搜索&#xff08;BFS&#xff09;广度优先搜索的步骤 三、应用场景四、总结 图的遍历是图论中的基本操作之一&am…

安卓 mvp 的架构的详细介绍

MVP 架构介绍 MVP&#xff08;Model-View-Presenter&#xff09;是一种软件架构模式&#xff0c;常用于构建用户界面&#xff08;UI&#xff09;。它将应用程序的逻辑划分为三个部分&#xff1a;Model、View 和 Presenter。MVP 的主要目标是分离视图和业务逻辑&#xff0c;使代…

ECU通讯:CAN总线仿真测试

01.ECU 在软件定义汽车的大背景下&#xff0c;几乎每一个汽车功能都需要依靠ECU&#xff08;Electronic Control Unit&#xff0c;电子控制单元&#xff09;来实现&#xff1a;有些功能靠ECU独立实现&#xff0c;有些功能则需要多个ECU联合实现。总体来说&#xff0c;ECU绝大多…

解决SonarQube中Vue项目中deep选择器报错的问题

1. 前言 当使用SonarQube对Vue项目进行代码质量审查时&#xff0c;可能会遭遇因Vue特有的deep选择器&#xff08;旨在实现样式深度穿透&#xff09;而触发的错误或警告。由于SonarQube默认并不识别这一Vue特有的语法&#xff0c;这些错误报告可能会成为审查过程中的干扰项。为了…

Mysql sql技巧与优化

1、解决mysql同时更新、查询问题 2、控制查询优化 hint 3、 优化 特定类型的查 优化 COUNT() 查询 使用 近似值 业务能接受近似值的话&#xff0c;使用explain拿到近似值 优化关联查询 优化子查询 4、优化group by和distinct 优化GROUP BY WITH ROLLUP 5、优化 limit分页 其他…

【MySQL-19】一文带你了解存储函数

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Lin…

Richteck立锜科技电源管理芯片简介及器件选择指南

一、电源管理简介 电源管理组件的选择和应用本身的电源输入和输出条件是高度关联的。 输入电源是交流或直流&#xff1f;需求的输出电压比输入电压高或是低&#xff1f;负载电流多大&#xff1f;系统是否对噪讯非常敏感&#xff1f;也许系统需要的是恒流而不是稳压 (例如 LED…

应届生软件测试面经_一名应届生的软件测试面试题目

1.你为什么选择软件测试行业 因为之前有了解软件测试这个行业&#xff0c;觉得他的发展前景很好&#xff0c; 2.根据你以前的项目经验描述一下软件开发、测试过程&#xff0c;由那些角色负责&#xff0c;你做什么 要有架构师、开发经理、测试经理、程序员、测试员。我在里面…

什么是死锁 , 以及产生的原因详细介绍

死锁 一. 什么是死锁 指的是两个或者两个以上的线程在执行的过程中由于竞争同步锁而产生的一种阻塞现象;如果没有外力的作用,他们将无法继续执行下去,这种情况称之为死锁, 通俗的说死锁产生的原因主要是由于线程的相互等待 , 导致程序无法进行下去 二. 代码阐述 这里我们写…

科技论文在线--适合练习期刊写作和快速发表科技成果论文投稿网站

中国科技论文在线这个平台可以作为练手的一个渠道&#xff0c;至少可以锻炼一下中文写作&#xff0c;或者写一些科研方向的简单综述性文章。当然&#xff0c;如果你的老师期末要求也是交一份科技论文在线的刊载证明的话&#xff0c;这篇文章可以给你提供一些经验。 中国科技论…