端点鉴别、安全电子邮件、TLS
文章目录
- 端点鉴别
- 鉴别协议ap 1.0——发送者直接发送一个报文表明身份
- 鉴别协议ap 2.0——ap1.0 的基础上,接收者对报文的来源IP地址进行鉴别
- 鉴别协议ap 3.0——使用秘密口令,口令为鉴别者和被鉴别者之间共享的秘密
- 鉴别协议ap 3.1——对秘密口令进行加密,但是容易收到回放攻击(Playback Attack)威胁
- 鉴别协议ap 4.0
- 安全电子邮件
- 电子邮件的安全威胁
- 安全电子邮件基本原理
- 加密性
- 发送方鉴别和报文完整性
- 机密性、发送方鉴别和报文完整性
- 安全电子邮件标准
- PGP 标准(pretty good privacy,高质量保密)
- PGP 的特点
- PGP过程
- 使TCP连接安全:TLS
- 宏观描述
- 握手
- 密钥导出
- 数据传输
- TLS记录
- 更完整的描述
- TLS握手
- 连接关闭
端点鉴别
端点鉴别
端点鉴别(end-point authentication)是一个实体经过计算机网络向另一个实体证明其身份的过程,这种鉴别应当在报文和数据交换的基础上,作为某鉴别协议的一部分独立完成。鉴别协议通常会在两个通信实体运行其他协议之前运行,鉴别协议首先建立相互满意的各方的标识;仅当鉴别完成之后,各方继续开始下面的工作。
鉴别协议ap 1.0——发送者直接发送一个报文表明身份
假设Alice要向Bob鉴别她自己的身份。
最简单的就是:Alice直接发送一个报文给Bob,说她就是Alice。
缺陷是Bob无法判断发送报文“I am Alice ”的人就是Alice,因为Trudy(入侵者)也可以发送这样的报文。


鉴别协议ap 2.0——ap1.0 的基础上,接收者对报文的来源IP地址进行鉴别
Alice说 “I am Alice ” ,并在她发送的IP数据包中包含了她的IP地址。
缺陷是Trudy可以生成一个分组,包括伪造的Alice的地址。


鉴别协议ap 3.0——使用秘密口令,口令为鉴别者和被鉴别者之间共享的秘密
Alice说 “I am Alice ” ,而且传送她的密码来证明。
口令为鉴别者和被鉴别者之间共享的秘密。比如Gmail、Telnet(远程终端协议)、FTP(文件传输协议)和许多服务都是使用口令鉴别。
缺陷是若Trudy窃听了Alice的通信,则可以得到Alice的口令。Trudy记录了Alice的分组,事后向Bob发送。
例子:


鉴别协议ap 3.1——对秘密口令进行加密,但是容易收到回放攻击(Playback Attack)威胁
完善鉴别协议ap 3.0 的下一个想法就是加密口令,通过加密口令,能够防止Trudy得知Alice的口令。假设Alice和Bob共享一个对称秘密秘钥K(A-B),则Alice可以加密口令,并向Bob发送其识别报文“ I am Alice ” 和加密的报文。Bob则解密口令,若口令正确,则鉴别了Alice。
虽然防止Trudy得知Alice的口令,缺陷是Bob受制于回放攻击,Trudy只需要窃听Alice的通信,并记录下该口令的加密版本,并向Bob回放该口令的加密版本,以假装她就是Alice。


鉴别协议ap 4.0
失败情形是由于Bob无法区分Alice的初始鉴别报文和后来入侵者回放的Alice的初始鉴别报文所导致的。也就是说,Bob 无法分辨 Alice 是否是活跃的(即当前是否还在连接的另一端),或者他接收到的报文是否就是前面鉴别Alice时录制的回放。
可以联想到TCP三次握手协议需要处理相同的问题。此处,我们可以采用同样的思路来进行身份验证。
不重数(Nonce):是在一个协议的生存期中只使用一次的数。也就是说,协议一旦使用了一个 nonce,就不会再使用该数字。ap 4.0 协议使用 nonce 的方式如下:
1、Alice向Bob发送信息 “ I am Alice ”。
2、Bob选择一个不重数 R,并将这个值发送给Alice。
3、Alice使用她与Bob共享的对称秘密密钥K(A-B)来加密这个不重数,然后把加密之后的不重数发回给Bob。由于Alice知道密钥,并用它加密一个值,Bob就知道收到的报文是Alice产生的。这个不重数用于确认Alice是活跃的。
4、Bob解密收到的报文,若解密得到的不重数等于Bob发送给Alice的那个不重数,则可以鉴别Alice的身份。
过程简单概括如下:
被鉴别者向鉴别者发送报文表明身份。
鉴别者选择一个不重数发送给被鉴别者。
被鉴别者用私钥加密不重数发送给鉴别者。


安全电子邮件
电子邮件的安全威胁
电子邮件的安全威胁:
(1)电子邮件的内容是公开的和可获取的。
(2)邮件在网络上反复复制,传输路径不确定,易遭到窃取、篡改、假冒甚至破坏。
电子邮件的安全需求:
1、机密性——只有真正的接收方才能阅读邮件。
2、完整性——电子邮件在传输过程中不被修改。
3、认证性——信息的发送者不被假冒。
4、抗抵赖性——发信人无法否认发过电子邮件。
安全电子邮件基本原理
加密性
Alice用对称秘钥Ks加密 明文邮件m,生成Ks(m)。同时用Bob的公钥加密Ks 得到KB+(Ks)。把加密邮件Ks(m) 和 加密秘钥KB+(Ks) 形成一个包发送给Bob。Bob可以根据私钥KB-得到秘钥Ks,再用Ks解密 Ks(m)得到解密报文m。

发送方鉴别和报文完整性
报文完整性用报文摘要,身份认证用数字签名。
Alice用散列函数对报文生成散列值H,得到报文摘要,Alice用私钥KA-对散列值进行签名,得到数字签名。把初始报文(未加密)和该数字签名级联起来生成一个包,发送给Bob。
Bob通过Alice公钥KA+解密数字签名,得到报文摘要。如果能解密成功,就证明了是Alice所发,否则无法用Alice公钥解密。
Bob用相同散列函数对明文 m 计算,如果摘要相同,证明没被篡改。

机密性、发送方鉴别和报文完整性
Alice生成一个预备包,包含她的初始报文和该报文数字签名过的散列。Alice把这个预备包看作一个报文,按照加密性那的步骤发送这个报文,即生成一个新包发送给Bob。
Bob收到这个包后,首先应用根据私钥KB-得到秘钥Ks,再用Ks解密 Ks(m)得到解密报文m。通过Alice公钥KA+解密数字签名,得到报文摘要。如果能解密成功,就证明了是Alice所发,否则无法用Alice公钥解密。Bob用相同散列函数对明文 m 计算,如果摘要相同,证明没被篡改。
Alice期望提供保密、发送者认证与报文完整性。
Alice私钥用于签名,身份认证;Bob共用用于加密的对称秘钥,传输对称秘钥。对称秘钥用于加密、解密报文。

安全电子邮件标准
1、PEM(privacy enhanced mail,增强型邮件保密)标准
- 在邮件标准格式上增加加密、认证和密钥管理 ;
- 依赖一个既存的、完全可操作的 PKI,发展被限制;
- PEM 像一个 OSI 标准,PGP 像一个 Internet 软件包;
2、PGP(pretty good privacy,高质量保密)标准 - 符合 PEM 的绝大多数规范,但不要求存在PKI;
- 创造性结合公钥加密的方便和对称加密的高速度;
- 数字签名和密钥管理机制设计巧妙;
- 不仅功能强大,速度快,而且源代码公开;
3、S/MIME 标准
S/MIME:secure/multipurpose Internet mail extensions —— 安全/多用途因特网邮件扩展 - 并非只能用于邮件传输,任何支持 MIME 的传输机制都可使用,如 HTTP;
- 对电子邮件最有效,因为必须保证邮件本身安全;
- 认证机制依赖于层次结构的 CA(Tree of Trust);
- 证书格式采用 X.509 规范,但支持的厂商比较少;
PGP 标准(pretty good privacy,高质量保密)
可在各种平台(Windows、UNIX等)免费运行,还可用于普通文件加密及军事目的,所用算法被证实为非常安全:
1、公钥加密算法 RSA、DSS 和 Diffie-Hellman;
2、对称加密算法 IDEA、3DES 和 CAST-128;
3、散列算法 SHA-1。
PGP 的特点
1、使用散列函数对邮件内容签名,保证信件内容不被篡改;
2、使用公钥和对称加密保证邮件内容机密且不可否认;
3、公钥的权威性由收发双方所信任的第三方签名认证;
4、事先不需要任何保密信道来传递对称的会话密钥。
PGP过程
1、对报文用SHA-1摘要;
2、对摘要RSA加密,用Alice的私钥,形成签名;
3、把前面和 报文m一起压缩;
4、压缩后,进行DES加密,DES用到了对称秘钥;
5、对称秘钥用Bob的公钥加密;
6、把压缩和 对称秘钥加密结果 用Base64 编码,编码后发送。

使TCP连接安全:TLS
SSL(Secure Socket Layer),即安全套接字层,是对 TCP 的强化。HTTPS 使用 SSL,而 HTTP 不使用。
SSL 通过采用机密性、数据完整性、服务器鉴别和客户鉴别来强化 TCP。
SSL 使 TCP 安全了,所以它能被应用于运行在 TCP 之上的任何应用程序。
如何增强TCP,提供包括保密性、数据完整性和端点认证在内的安全服务,这个增强版的TCP通常被称为传输层安全(TLS)。这个协议的早期版本和类似版本是SSL版本3。自从其诞生以来,SSL及其继任者TLS已经得到了广泛的部署。TLS被所有流行的Web浏览器和Web服务器支持,并且被Gmail和几乎所有的互联网商务网站(包括亚马逊、eBay和淘宝)使用。实际上,如果曾经使用信用卡在互联网上购买过任何东西,浏览器和服务器之间的通信几乎可以肯定地是通过TLS进行的。(可以通过浏览器的URL以https:而不是http开头来判断TLS正在被使用。)
以一个典型的互联网商务场景,理解TLS的需求:Bob正在网上冲浪,来到了Alice公司的网站,该网站正在销售香水。Alice公司的网站显示了一个表格,Bob应该在其中输入他想要的香水类型和数量、他的地址和他的支付卡号码。Bob输入这些信息,点击提交,并期望通过普通邮寄收到他购买的香水;他还期望在他的下一个支付卡对账单中收到他订单的费用。这一切都听起来不错,但如果不采取安全措施,Bob可能会遇到一些惊喜。
- 如果不使用保密性(加密),入侵者可以拦截Bob的订单并获得他的支付卡信息。入侵者随后可以以Bob的名义进行购买。
- 如果不使用数据完整性,入侵者可以修改Bob的订单,让他购买比他想要的多十倍的香水。
- 最后,如果不使用服务器认证,服务器可以显示Alice公司的著名标志,而实际上该站点由Trudy维护,她伪装成Alice公司。在收到Bob的订单后,Trudy可以拿走Bob的钱并逃跑。或者Trudy可以通过收集Bob的姓名、地址和信用卡号码来实施身份盗窃。
TLS通过增强TCP的保密性、数据完整性、服务器认证和客户端认证来解决这些问题。TLS通常用于保护在HTTP上进行的交易的安全。然而,由于TLS保护TCP,它可以被任何运行在TCP上的应用程序使用。TLS提供了一个简单的应用程序编程接口(API)与套接字,这与TCP的API类似且类似。当应用程序想要使用TLS时,应用程序包括SSL类/库。如图所示,尽管从技术上讲TLS位于应用层,但从开发人员的角度来看,它是一个传输协议,提供增强了安全服务的TCP服务。

宏观描述
首先描述一个简化版的TLS,这将能够从宏观上理解TLS的原因和方法。将这个简化版的TLS称为“类-TLS”。在描述了类-TLS之后,将在下一个子节中描述真正的TLS,填补细节。类-TLS(和TLS)有三个阶段:握手、密钥导出和数据传输。现在描述这三个阶段,用于客户端(Bob)和服务器(Alice)之间的通信会话,Alice拥有一个私钥/公钥对和将她的身份与其公钥绑定的证书。
握手
在握手阶段,Bob需要(a)与Alice建立TCP连接,(b)验证Alice确实是Alice,(c)向Alice发送一个主密钥。这个密钥将被Alice和Bob用来生成他们需要的所有对称密钥进行TLS会话。这三个步骤如图所示,展示了一个典型的TLS(传输层安全)握手过程,分为三个主要阶段:
-
TCP 三次握手:
- (a) TCP SYN:客户端向服务器发送一个SYN(同步序列编号)包,请求建立连接。
- TCP/SYNACK:服务器收到SYN包后,回复一个SYN-ACK(同步-确认)包,表示同意建立连接,并要求客户端确认。
- TCP ACK:客户端收到SYN-ACK包后,发送一个ACK(确认)包给服务器,完成TCP连接的建立。
-
TLS 握手:
- (b) TLS hello:在TCP连接建立后,客户端发送一个TLS hello消息给服务器,开始TLS握手过程。这个消息包含了客户端支持的加密算法和TLS版本等信息。
- certificate:服务器响应客户端的TLS hello消息,发送自己的证书给客户端。这个证书包含了服务器的公钥,用于后续的加密通信。
-
密钥交换和加密:
- © Create Master Secret (MS):客户端和服务器使用TLS协议中的密钥交换算法,共同生成一个主密钥(Master Secret,MS)。
- EMS = KA^(MS):客户端使用服务器的公钥(KA)加密主密钥(MS),生成加密的主密钥(Encrypted Master Secret,EMS)。
- Decrypts EMS with KA to get MS:服务器使用自己的私钥解密EMS,得到主密钥MS。这样,客户端和服务器都有了相同的主密钥,用于后续的加密通信。
这个过程确保了通信双方的身份验证,并且生成了一个只有通信双方知道的密钥,用于加密和解密数据,从而保证了通信的安全性。
注意,一旦TCP连接建立,Bob向Alice发送一个hello消息。Alice随后用她的证书响应,其中包含她的公钥。因为证书已经由CA认证,Bob知道证书中的公钥属于Alice。Bob然后生成一个主密钥(MS)(这只用于这个TLS会话),用Alice的公钥加密MS以创建加密的主密钥(EMS),并将EMS发送给Alice。Alice用她的私钥解密EMS以获得MS。在这个阶段之后,Bob和Alice(没有其他人)都知道这个TLS会话的主密钥。

密钥导出
原则上,MS此时已由Bob和Alice共享,可以被用作所有后续加密和数据完整性检查的对称会话密钥。然而,通常认为更安全的做法是,Alice和Bob各自使用不同的加密密钥,并且对于加密和完整性检查使用不同的密钥。因此,Alice和Bob都使用MS生成四个密钥:
- EB ,从Bob发送到Alice的数据的会话加密密钥
- MB ,从Bob发送到Alice的数据的会话MAC密钥,其中MAC是标准化的哈希消息认证码(MAC)
- EA ,从Alice发送到Bob的数据的会话加密密钥
- MA,从Alice发送到Bob的数据的会话MAC密钥
Alice和Bob各自从MS生成这四个密钥。这可以通过简单地将MS分成四个密钥来完成。在密钥导出阶段结束时,Alice和Bob都有四个密钥。两个加密密钥将用于加密数据;两个MAC密钥将用于验证数据的完整性。
数据传输
现在Alice和Bob共享相同的四个会话密钥(EB、MB、EA和MA),他们可以开始通过TCP连接安全地相互发送数据。由于TCP是字节流协议,一个自然的方法将是TLS在传输中加密应用数据,然后将加密的数据在传输中传递给TCP。但我们并不想等到整个TCP会话结束时才验证Bob发送的所有数据的完整性!
为了解决这个问题,TLS将数据流分成记录,为每个记录附加MAC以进行完整性检查,然后加密该“ 记录+HMAC”。为了创建MAC,Bob将记录数据和密钥MB输入到哈希函数中。为了加密“ 记录+HMAC”这个包,Bob使用他的会话加密密钥EB。然后这个加密包被传递给TCP以通过互联网传输。尽管这种方法非常有效,但在提供整个消息流的数据完整性方面仍然不是无懈可击的。特别是,假设Trudy是一个中间女人,并且有能力在Alice和Bob之间发送的TCP段流中插入、删除和替换段。例如,Trudy可以捕获Bob发送的两个段,反转段的顺序,调整TCP序列号(这些序列号没有加密),然后将两个反转顺序的段发送给Alice。假设每个TCP段恰好封装了一个记录,让我们现在看看Alice将如何处理这些段。
- 在Alice中运行的TCP会认为一切正常,并将两个记录传递给TLS子层。
- Alice中的TLS将解密这两个记录。
- Alice中的TLS将使用每个记录中的HMAC来验证这两个记录的数据完整性。
- 然后TLS将两个记录的解密字节流传递给应用层;但由于记录的反转,Alice接收到的完整字节流将不在正确的顺序中!
这个问题的解决方案,你可能已经猜到了,就是使用序列号。TLS如下所示。Bob维护一个序列号计数器,它从零开始,并且对于他发送的每个TLS记录都会增加。Bob实际上并不在记录本身中包含序列号,但是当他计算HMAC时,他将序列号包含在HMAC计算中。因此,HMAC现在是数据加上HMAC密钥MB加上当前序列号的哈希。Alice跟踪Bob的序列号,允许她通过在HMAC计算中包含适当的序列号来验证记录的数据完整性。这种使用TLS序列号的方法防止了Trudy进行例如重新排序或重放报文段等中间人攻击。
TLS记录
TLS记录(以及almost-TLS记录)如图所示。记录由类型字段、版本字段、长度字段、数据字段和HMAC字段组成。注意,前三个字段没有被加密。
类型字段指示记录是握手消息还是包含应用程序数据的消息。它也用于关闭TLS连接。接收端的TLS使用长度字段从传入的TCP字节流中提取TLS记录。版本字段是自解释的。

更完整的描述
TLS握手
SSL不强制Alice和Bob使用特定的对称密钥算法或特定的公钥算法。相反,TLS允许Alice和Bob在握手阶段,在TLS会话开始时,就密码算法达成一致。此外,在握手阶段,Alice和Bob相互发送不重数,这些nonce用于创建会话密钥(EB、MB、EA和MA)。实际TLS握手的步骤如下:
- 客户端发送它支持的密码算法的列表,连同一个客户的不重数。
- 从列表中,服务器选择一个对称算法(例如AES)和一个公钥算法(例如具有特定密钥长度的RSA),以及HMAC算法(MD5或SHA-1)以及HMAC密钥。它将它的选择,以及证书和服务器不重数返回给客户。
- 客户验证证书,提取服务器的公钥,生成一个前主密钥(PMS),用服务器的公钥加密PMS,并将加密的PMS发送给服务器。
- 使用相同的密钥派生函数(由TLS标准指定),客户和服务器独立地从PMS和不重数计算主密钥(MS)。然后MS被分割以生成两个加密和两个HMAC密钥。此外,当选择的对称密码使用CBC(如3DES或AES)时,从MS中为连接的两侧各获得两个初始化向量(IV)。此后,客户端和服务器之间发送的所有消息都被加密和认证(使用HMAC)。
- 客户端发送所有握手消息的HMAC。
- 服务器发送所有握手消息的HMAC。
最后两步保护握手免受篡改。为了看到这一点,观察在步骤1中,客户端通常提供一个算法列表——有些强,有些弱。这个算法列表以明文发送,因为加密算法和密钥尚未达成一致。作为中间人的Trudy可以删除列表中的更强算法,迫使客户端选择一个弱算法。为了防止这种篡改攻击,在步骤5中,客户端发送其发送和接收的所有握手消息的HMAC。服务器可以将这个HMAC与其接收和发送的握手消息的HMAC进行比较。如果存在不一致,服务器可以终止连接。类似地,服务器发送其看到的握手消息的HMAC,允许客户端检查不一致性。
你可能会想知道为什么在步骤1和2中有nonce。序列号难道不足以防止段重放攻击吗?答案是是的,但它们本身并不能防止“连接重放攻击”。考虑以下连接重放攻击。假设Trudy嗅探了Alice和Bob之间的所有消息。第二天,Trudy伪装成Bob,向Alice发送了与前一天Bob向Alice发送的完全相同的消息序列。如果Alice不使用nonce,她将对前一天发送的完全相同的消息序列做出响应。Alice不会怀疑任何有趣的业务,因为她接收到的每条消息都将通过完整性检查。如果Alice是一个电子商务服务器,她将认为Bob正在下第二个订单(完全相同的东西)。另一方面,通过在协议中包含一个nonce,Alice将为每个TCP会话发送不同的nonce,导致两天的加密密钥不同。因此,当Alice从Trudy接收到播放回放的TLS记录时,记录将无法通过完整性检查,伪造的电子商务交易将不会成功。总之,在TLS中,nonce用于防御“连接重放攻击”,序列号用于防御在正在进行的会话期间重放单个数据包。
连接关闭
在某个时候,Bob或Alice将想要结束TLS会话。一种方法是让Bob通过简单地终止底层TCP连接来结束TLS会话——即,让Bob向Alice发送一个TCP FIN段。但这样的简单设计为截断攻击设置了舞台,Trudy再次进入正在进行的TLS会话中间,并提前用TCP FIN结束会话。如果Trudy这样做,Alice会认为她收到了Bob的所有数据,而实际上她只收到了部分数据。解决这个问题的方法是在类型字段中指示记录是否用于终止TLS会话。(尽管TLS类型是以明文发送的,但它在接收器处使用记录的HMAC进行认证。)通过包含这样一个字段,如果Alice在没有收到关闭TLS记录的情况下收到TCP FIN,她就会知道有些有趣的事情发生了。
相关文章:
端点鉴别、安全电子邮件、TLS
文章目录 端点鉴别鉴别协议ap 1.0——发送者直接发送一个报文表明身份鉴别协议ap 2.0——ap1.0 的基础上,接收者对报文的来源IP地址进行鉴别鉴别协议ap 3.0——使用秘密口令,口令为鉴别者和被鉴别者之间共享的秘密鉴别协议ap 3.1——对秘密口令进行加密&…...
汽车电子元件的可靠性保障:AEC-Q102认证
AEC-Q102标准的起源与价值 随着汽车电子系统的日益复杂,电子器件必须能够在极端的温度、湿度、振动和电磁干扰等恶劣条件下保持性能。AEC-Q102标准由汽车电子委员会(AEC)制定,专门针对LED、激光二极管和光电二极管等光电器件&…...
主成分分析法大全(包括stata+matlab)
数据简介:主成分分析(Principal Component Analysis,PCA), 是一种统计方法。通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。在实际课题中,为了…...
ubuntu+ros新手笔记(五):初探anaconda+cuda+pytorch
深度学习三件套:初探anacondacudapytorch 系统ubuntu22.04 1.初探anaconda 1.1 安装 安装过程参照【详细】Ubuntu 下安装 Anaconda 1.2 创建和删除环境 创建新环境 conda create -n your_env_name pythonx.x比如我创建了一个名为“py312“的环境 conda cre…...
C++ List(双向链表)
是一个线性链表结构,它的数据由若干个节点构成,每一个节点都包括一个 信息块(即实际存储的数据)、一个前驱指针和一个后驱指针。它无需分配指定 的内存大小且可以任意伸缩,这是因为它存储在非连续的内存空间中&#…...
ASP.NET|日常开发中读写TXT文本详解
ASP.NET|日常开发中读写TXT文本详解 前言一、读取 TXT 文本1.1 使用StreamReader类 二、写入 TXT 文本2.1 使用StreamWriter类 三、文件编码问题3.1 常见编码格式 四、错误处理和性能考虑4.1 错误处理4.2 性能考虑 结束语优质源码分享 ASP.NET|日常开发中…...
【机器学习】在不确定的光影中:机器学习与概率论的心灵共舞
文章目录 概率与统计基础:解锁机器学习的数据洞察之门前言一、概率论基础1.1 概率的基本概念与性质1.1.1 概率的定义1.1.2 样本空间与事件1.1.3 互斥事件与独立事件1.1.4 概率的计算方法 1.2 条件概率与独立性1.2.1 条件概率1.2.2 独立事件 1.3 随机变量1.3.1 随机变…...
【论文笔记】Editing Models with Task Arithmetic
🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 基本信息 标题: Editing Models with Task…...
ESP32外设学习部分--UART篇
前言 在我们学习嵌入式的过程中,uart算是我们用的非常多的一个外设了,我们可以用串口打印信息,也可以用于设备通信,总之串口的作用非常多,我们也非常有必要熟练地去掌握这个外设。 uart的配置 uart的参数配置 uart_…...
ssm-day04 mybatis
mybatis是一个持久层框架,针对的是JDBC的优化 简化数据库操作,能进行单表、多表操作,在这个框架下,需要我们自己写SQL语句 Mapper接口和MapperXML文件就相当于Dao和Dao层的实现 通常将xml文件放在resources包下 ,放在…...
es中段是怎么合并的
文章目录 1. 段合并的背景2. 合并的方式2.1TieredMergePolicy 的层次结构2.2 层次的基本规则2.3 如何理解层次(tier)2.4. 合并过程中的层次示例2.5. TieredMergePolicy 的优势2.6. 小结 3. 合并过程中的优化4. 合并的性能考虑5. 使用 API 手动合并6. 合并…...
5、可暂停的线程控制模型
一、需求 在做播放器的时候,很多的模块会创建一个线程,然后在这个线程上跑单独的功能,同时,需要对这个线程进行控制,比如暂停,继续等,如播放器的解码,解封装等,都需要对…...
sql优化--mysql隐式转换
sql隐式转换 在SQL中,隐式转换是数据库自动进行的类型转换,隐式转换可以帮助我们处理不同类型的数据。 比如,数据表的字段是字符串类型的,传入一个整型的数据,也能够运行sql。 sql隐式转换的弊端 sql隐式转换&…...
Scratch021(画笔)
画笔模块 可以这么理解,画笔模块是Scratch的拓展模块,用它可以完成很多的功能,非常有趣! 案例要求 点击绿旗运行程序,页面显示需要绘制的背景。 可以使用鼠标移动画笔角色,按照顺序点击连线,…...
Leetcode 3387. Maximize Amount After Two Days of Conversions
Leetcode 3387. Maximize Amount After Two Days of Conversions 1. 解题思路2. 代码实现 题目链接:3387. Maximize Amount After Two Days of Conversions 1. 解题思路 这一题思路上其实就是要分别求出day 1以及day 2中原始货币与其他各个货币之间的成交价&…...
机器视觉与OpenCV--01篇
计算机眼中的图像 像素 像素是图像的基本单位,每个像素存储着图像的颜色、亮度或者其他特征,一张图片就是由若干个像素组成的。 RGB 在计算机中,RGB三种颜色被称为RGB三通道,且每个通道的取值都是0到255之间。 计算机中图像的…...
简单的Java小项目
学生选课系统 在控制台输入输出信息: 在eclipse上面的超级简单文件结构: Main.java package experiment_4;import java.util.*; import java.io.*;public class Main {public static List<Course> courseList new ArrayList<>();publi…...
使用layui的table提示Could not parse as expression(踩坑记录)
踩坑记录 报错图如下 原因: 原来代码是下图这样 上下俩中括号都是连在一起的,可能导致解析问题 改成如下图这样 重新启动项目,运行正常!...
区块链共识机制详解
一.共识机制简介 在区块链的交流和学习中,「共识算法」是一个很频繁被提起的词汇,正是因为共识算法的存在,区块链的可信性才能被保证。 1.1 为什么需要共识机制? 所谓共识,就是多个人达成一致的意思。我们生活中充满…...
【Excel】单元格分列
目录 分列(新手友好) 1. 选中需要分列的单元格后,选择 【数据】选项卡下的【分列】功能。 2. 按照分列向导提示选择适合的分列方式。 3. 分好就是这个样子 智能分列(进阶) 高级分列 Tips: 新手推荐基…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
全面解析各类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…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
