网络安全协议系列
目录
一、安全协议的引入
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(K⊕opad|H(K⊕ipad|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,使得
mod p = Z。因此,可以产生从1到p-1的所有数字。设X<p,计算Y =
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等协议分析方法和工具,以保障协议的安全性。
相关文章:
网络安全协议系列
目录 一、安全协议的引入 1.TCP/IP协议族中普通协议的安全缺陷 1.信息泄露 2.信息篡改 3.身份伪装 4.行为否认 2.网络安全需求 二、网络安全协议的定义 三、构建网络安全协议所需的组件 1.加密与解密 2.消息摘要 3.消息验证码 4.数字签名 5.密钥管理 1.建立共享…...
.net core appsettings.json 配置 http 无法访问
1、在appsettings.json中配置"urls": "http://0.0.0.0:8188" 2、但是网页无法打开 3、解决办法,在Program.cs增加下列语句 app.UseAntiforgery();...
opencv—常用函数学习_“干货“_11
目录 二九、图像累加 将输入图像累加到累加图像中 (accumulate) 将输入图像加权累加到累加图像中 (accumulateWeighted) 将输入图像的平方累加到累加图像中 (accumulateSquare) 将两个输入图像的乘积累加到累加图像中 (accumulateProduct) 解释 三十、随机数与添加噪声 …...
WSL-Ubuntu20.04部署环境配置
1.更换Ubuntu软件仓库镜像源 为了在WSL上使用TensorRT进行推理加速,需要安装以下环境,下面将按以下顺序分别介绍安装、验证以及删除环境: #1.C环境配置 gcc、gdb、g #2.gpu环境 cuda、cudnn #3.Cmake环境 CMake #4.OpenCV环境 OpenCV #5.Ten…...
6Python的Pandas:数据读取与输出
Pandas是一个强大的Python数据分析库,提供了读取和输出数据的多种功能。以下是一些常见的数据读取与输出方法: 1. 读取CSV 读取数据 从CSV文件读取数据 import pandas as pd# 读取CSV文件 df pd.read_csv(file_path.csv) print(df.head())从Excel文…...
ubuntu 网络 通讯学习笔记2
1.ubuntu 网络常用命令 在Ubuntu中,有许多网络相关的常用命令。以下是一些主要命令及其用途: ifconfig:此命令用于显示和配置网络接口信息。你可以使用它来查看IP地址、子网掩码、广播地址等。 例如:ifconfig 注意:…...
深入理解JS中的事件委托
JavaScript中的事件委托是一种非常有用的事件处理模式,它允许我们利用事件模型的事件冒泡阶段来减少事件处理器的数量,提高网页性能。本文将介绍事件委托的概念、工作原理、优点以及如何在实际项目中应用事件委托。 1、事件模型 事件模型指在Web开发中,处理和管理事件(如…...
Camera Raw:首选项
Camera Raw 首选项 Preferences提供了丰富的配置选项,通过合理设置,可以显著提升图像处理的效率和效果。根据个人需求调整这些选项,有助于创建理想的工作环境和输出质量。 ◆ ◆ ◆ 打开 Camera Raw 首选项 方法一:在 Adobe Bri…...
HLS加密技术:保障流媒体内容安全的利器
随着网络视频内容的爆炸性增长,如何有效保护视频内容的版权和安全成为了一个亟待解决的问题。HLS(HTTP Live Streaming)加密技术作为一种先进的流媒体加密手段,凭借其高效性和安全性,在直播、点播等场景中得到了广泛应…...
捷配总结的SMT工厂安全防静电规则
SMT工厂须熟记的安全防静电规则! 安全对于我们非常重要,特别是我们这种SMT加工厂,通常我们所讲的安全是指人身安全。 但这里我们须树立一个较为全面的安全常识就是在强调人身安全的同时亦必须注意设备、产品的安全。 电气: 怎样预…...
UE4-初见虚幻引擎
一.创建自己的工程 1.启动 a.通过桌面双击图标来打开对应版本的虚幻引擎 b.通过EPIC启动器开启动虚幻引擎 2.选择或新建项目 ps:高版本虚幻编辑器可以打开低版本的虚幻项目,但是高版本虚幻的项目不可以由低版本的虚幻编辑器打开。 3. 选择要打开的项目 4.选择模版 选…...
基于Vue CLI 3构建Vue3项目(Vue2也可参考)
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...
Midjourney 绘画提示词汇总:让你的 AI 绘画与众不同
在 AI 技术迅速发展的今天,AI 绘画已经成为了创意工作中的一大利器。Midjourney 作为其中的佼佼者,以其强大的绘画能力和高质量的输出受到了广大用户的喜爱。为了帮助你充分发挥 Midjourney 的潜力,我们整理了一些能够让 AI 绘画与众不同的提…...
React和Vue.js的相似性和差异性是什么?
React 和 Vue.js 都是流行的前端 JavaScript 框架,它们有一些相似性和差异性: 相似性: 组件化:React 和 Vue.js 都支持组件化开发,允许开发者将界面拆分为独立的组件,提高代码的复用性和可维护性。…...
Nginx 和 PHP(特别是使用 Swoole 扩展)的配置和调优
针对千万级用户的高并发应用,Nginx 和 PHP(特别是使用 Swoole 扩展)的配置和调优是至关重要的。 以下是详细的配置和调优建议: Nginx 配置和调优 工作进程数(worker_processes): 根据 CPU 核心…...
Kafka Producer发送消息流程之消息异步发送和同步发送
文章目录 1. 异步发送2. 同步发送 1. 异步发送 Kafka默认就是异步发送,在Main线程中的多条消息,没有严格的先后顺序,Sender发送后就继续下一条,异步接受结果。 public class KafkaProducerCallbackTest {public static void mai…...
Flutter 状态管理调研总结
一, 候选状态管理组件简介 0. flutter_hooks 一个 React 钩子在 Flutter 上的实现:Making Sense of React Hooks 钩子是一种用来管理 Widget 生命周期的新对象,以减少重复代码、增加组件间复用性,允许将视图逻辑提取到通用的用例中并重用&…...
入门C语言只需一个星期(星期二)
点击上方"蓝字"关注我们 01、算术运算符 int myNum = 100 + 50;int sum1 = 100 + 50; // 150 (100 + 50)int sum2 = sum1 + 250; // 400 (150 + 250)int sum3 = sum2 + sum2; // 800 (400 + 400) + 加 将两个值相加 x + y - 减 从另一个值中减去一个值 …...
切换node版本
一、在Linux上切换Node.js版本有多种实现方法: 1.使用nvm(Node Version Manager): 安装nvm:可以通过curl或wget来安装nvm,具体请参考nvm的官方文档。 安装不同版本的Node.js:使用nvm可以轻松…...
【常见开源库的二次开发】基于openssl的加密与解密——Base的编解码(二进制转ascll)(二)
目录: 目录: 一、 Base64概述和应用场景 1.1 概述 1.2 应用场景 二、Base16 2.1 Base16编码 2.2 Base16编解码 三、Base64 四、OpenSSL BIO接☐ 4.1 Filter BIOs: 4.2 Source/Sink BIOs: 4.3 应用场景: 4.4 具体使用&…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...





