【计算机网络】https协议

news2024/9/21 20:40:32

目录

概念的准备

什么是加密

为什么需要加密

常见的加密方式

对称加密

非对称加密

数据摘要(数字指纹)

数字签名

https的工作过程

方案一:只使用对称加密

方案二:只使用非对称加密

方案三:双方都采用非对称加密

方案四:非对称加密+对称加密

中间人攻击

CA认证

理解证书

数字签名

客户端认证

常见问题

中间人有没有可能篡改该证书?

为什么摘要内容在网络传输的时候⼀定要加密形成签名?

https完整流程 


       

        上一章节我们讲解了http协议,我们知道http协议是明文传输的,是非常不安全的。为了解决这个安全问题,我们便采用了一种新的协议——https协议.

概念的准备

        为了安全,我们需要对数据进行加密,防止被他人劫持得到数据,然后造成隐私等泄露。那么什么是加密呢?

什么是加密

加密就是把 明⽂ (要传输的信息)进⾏⼀系列变换, ⽣成 密⽂ .

解密就是把 密⽂ 再进⾏⼀系列变换, 还原成 明⽂ .

在这个加密和解密的过程中, 往往需要⼀个或者多个中间的数据, 辅助进⾏这个过程, 这样的数据称为 密 钥.

为什么需要加密

运营商劫持

        大家可能遇到这样的情况,当我们从网上下载一个软件时,下载完成后,可能根本不是我们想要下载的软件。这是因为我们的请求结果被劫持了,然后被替换成了其他的连接。

        由于我们通过⽹络传输的任何的数据包都会经过运营商的⽹络设备(路由器, 交换机等), 那么运营商的⽹ 络设备就可以解析出你传输的数据内容, 并进⾏篡改.

        点击 "下载按钮", 其实就是在给服务器发送了⼀个 HTTP 请求, 获取到的 HTTP 响应其实就包含了该 APP 的下载链接. 运营商劫持之后, 就发现这个请求是要下载这个软件比如天天动听, 那么就⾃动的把交给⽤户的响应 给篡改成 比如"QQ浏览器" 的下载地址了.

        图解如下:

所以:因为http的内容是明⽂传输的,明⽂数据会经过路由器、wifi热点、通信服务运营商、代理服务 器等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被双⽅察觉,这就是 中间人攻击 ,所以我们才需要对信息进⾏加密。

        当然不只是运营商可以劫持用户的请求,一些黑客也可以利用类似的手段进行劫持,然后获得或者篡改数据。假设我们提交的是我们的支付密码,那带来的后果非常严重,因此需要对http请求进行加密,进一步来保护用户的隐私安全。

常见的加密方式

对称加密

        采⽤单钥密码系统的加密⽅法,同⼀个密钥可以同时⽤作信息的加密和解密,这种加密⽅法称为对 称加密,也称为单密钥加密,特征:加密和解密所⽤的密钥是相同的

        • 常⻅对称加密算法(了解):DES、3DES、AES、TDEA、Blowfish、RC2等

        • 特点:算法公开、计算量⼩、加密速度快、加密效率⾼ 对称加密其实就是通过同⼀个 "密钥" , 把明⽂加密成密⽂, 并且也能把密⽂解密成明文


来一个最简单的例子,比如异或,我们假设这个密钥key=8888.

        然后此时有一个明文a=1234需要发送给对方,首先对a进行加密a^key=9834, 然后对方会收到"9834"这个数据,然后对这个数据进行解密:9834 ^ key = 1234.这样便得到了发送方发送的数据了。(这里是利用到了同一个数据异或两次等于它本身)

        当然, 按位异或只是最简单的对称加密. HTTPS 中并不是使⽤按位异或

非对称加密

        需要两个密钥来进⾏加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥 (private key,简称私钥)。

        • 常⻅⾮对称加密算法(了解):RSA,DSA,ECDSA

        • 特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,⽽使得加密解密速度非常慢,没有对 称加密解密的速度快。


        ⾮对称加密要⽤到两个密钥, ⼀个叫做 "公钥", ⼀个叫做 "私钥". 公钥和私钥是配对的.

最⼤的缺点就是运算速度⾮常慢,⽐对称加密要慢很多

• 通过公钥对明⽂加密, 变成密⽂

• 通过私钥对密⽂解密, 变成明⽂

假设对于一个数据,我们首先要利用公钥对数据进行加密,然后发送给对方后,对方利用私钥再对这个加密的数据进行解密,而这个私钥世界上只有接收方这一个知道。这样也就保证了数据的安全。

        例子:A 要给 B ⼀些重要的⽂件, 但是 B 可能不在. 于是 A 和 B 提前做出约定: B 说: 我桌⼦上有个盒⼦, 然后我给你⼀把锁, 你把⽂件放盒⼦⾥⽤锁锁上, 然后我回头拿着钥匙来开锁 取⽂件. 在这个场景中, 这把锁就相当于公钥, 钥匙就是私钥. 公钥给谁都⾏(不怕泄露), 但是私钥只有 B ⾃⼰持 有. 持有私钥的⼈才能解密.

数据摘要(数字指纹)

        • 数据摘要(数字指纹),其基本原理是利⽤单向散列函数(Hash函数)对信息进⾏运算,⽣成⼀串固定⻓度 的数字摘要。数字指纹并不是⼀种加密机制,但可以⽤来判断数据有没有被窜改。

        • 摘要常⻅算法:有MD5、SHA1、SHA256、SHA512等,算法把⽆限的映射成有限,因此可能会有 碰撞(两个不同的信息,算出的摘要相同,但是概率⾮常低)

        • 摘要特征:和加密算法的区别是,数据摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推 原信息,通常⽤来进⾏数据对⽐.也可以说数据摘要是不可逆的.


        例如所用的百度网盘,大家转存文件时,通常非常大的数据例如几十个G,在一到两秒内就可以完成,这是如何做到的呢?

        其实第一个人在上传资源时,会给该资源利用hash函数生成一个数据摘要,然后存在百度网盘服务端中,当有一个人再上传或转存资源时,会首先在本地给该资源生成一个数据摘要,然后与网盘中所有的摘要对比,如果有,则直接生成一个链接文件直接指向它即可,所以速度会非常快。而如果自己上传的文件别人从来没有上传过,那么速度就可能很慢了。这便是数据摘要的一个应用。

数字签名

对上面所形成的数据摘要进行加密后的数据,就是数字签名,这个有什么用呢,我们本文章后面再对这个内容进行详细的讲解。

https的工作过程

        既然要保证数据安全, 就需要进⾏ "加密". ⽹络传输中不再直接传输明⽂了, ⽽是加密之后的 "密⽂". 加密的⽅式有很多, 但是整体可以分成两⼤类: 对称加密 和 ⾮对称加密

方案一:只使用对称加密

        如果通信双⽅都各⾃持有同⼀个密钥X,且没有别⼈知道,这两⽅的通信安全当然是可以被保证的(除⾮密钥被破解)

        引⼊对称加密之后,即使数据被截获,由于⿊客不知道密钥是多少,因此就⽆法进⾏解密,也就不知道请求的真实内容是说明了。
        但事情没这么简单.服务器同⼀时刻其实是给很多客户端提供服务的.这么多客户端,每个⼈⽤的秘钥都必须是不同的(如果是相同那密钥就太容易扩散了,?⿊客就也能拿到了).因此服务器就需要维护每个客户端和每个密钥之间的关联关系,这也是个很⿇烦的事情 

        按我们说的,那就提前双方协商好密钥是多少就好了,但是如果直接把密钥明⽂传输,那么⿊客也就能获得密钥了此时后续的加密操作就形同虚设了.
因此密钥的传输也必须加密传输!
但是要想对密钥进⾏对称加密,?就仍然需要先协商确定⼀个密钥的密钥.这就成了"先有鸡还是先有蛋"的问题了.此时密钥的传输再⽤对称加密就⾏不通了.


方案二:只使用非对称加密

        鉴于⾮对称加密的机制,如果服务器先把公钥以明⽂⽅式传输给客户端,之后客户端向服务器传数据前都先⽤这个公钥加密好再传,从客户端到服务器信道是安全的,因为只有服务器有相应的私钥能解开公钥加密的数据。
        但是服务器到浏览器的这条路怎么保障安全?

        如果服务器⽤它的私钥加密数据传给客户端,那么客户端⽤公钥可以解密它,⽽这个公钥是⼀开始通过明⽂传输给浏览器的,若这个公钥被中间⼈劫持到了,那他也能⽤该公钥解密服务器传来的信息了.

如果用公钥加密数据发送给客户端,但客户端不知道私钥,所以也没办法解密数据

所以这种方法也不可行.


方案三:双方都采用非对称加密

1. 服务端拥有公钥S与对应的私钥S',客⼾端拥有公钥C与对应的私钥C'
2. 客⼾和服务端交换公钥
3. 客⼾端给服务端发信息:先⽤S对数据加密,再发送,只能由服务器解密,因为只有服务器有私钥S'
4. 服务端给客⼾端发信息:先⽤C对数据加密,在发送,只能由客⼾端解密,因为只有客⼾端有私钥C'
这样貌似也⾏啊,但是
• 效率太低(非对称加密本身速度很慢,双方都使用了非对称加密,速度会更加缓慢)
依旧有安全问题

  • 在实际情况中,双方都采用非对称加密进行密钥交换存在一些安全问题,如中间人攻击(Man-in-the-Middle, MITM)。
  • 中间人攻击是指攻击者冒充服务器与客户端建立连接,并与双方分别建立非对称加密连接。攻击者可以同时与客户端和服务器交换公钥,将双方的密钥替换为自己持有的密钥。因此,攻击者能够获取、查看和修改双方之间的通信内容。(后面会说)

方案四:非对称加密+对称加密

这个方案我们首先要解决效率问题。

  1. 服务端具有⾮对称公钥S和私钥S'
  2. 客⼾端发起https请求,获取服务端公钥S
  3. 客⼾端在本地⽣成对称密钥C,通过公钥S加密,发送给服务器.
  4. 由于中间的⽹络设备没有私钥,即使截获了数据,也⽆法还原出内部的原⽂,也就⽆法获取到对称密钥
  5. 服务器通过私钥S'解密,还原出客⼾端发送的对称密钥C.并且使⽤这个对称密钥加密给客⼾端返回的响应数据.
  6. 后续客⼾端和服务器的通信都只⽤对称加密即可.由于该密钥只有客⼾端和服务器两个主机知道,其他主机/设备不知道密钥即使截获数据也没有意义

中间人攻击

        在⽅案4中,客⼾端获取到公钥S之后,对客⼾端形成的对称密钥X⽤服务端给客⼾端的公钥S进⾏加密,中间⼈即使窃取到了数据,此时中间⼈确实⽆法解出客⼾端形成的密钥X,因为只有服务器有私钥S'.
但是中间⼈的攻击,如果在最开始握⼿协商的时候就进⾏了,那就不⼀定了,假设hacker已经成功成为中间⼈.

1. 服务器具有⾮对称加密算法的公钥S,私钥S'
2. 中间⼈具有⾮对称加密算法的公钥M,私钥M'
3. 客⼾端向服务器发起请求,服务器明⽂传送公钥S给客⼾端
4. 中间⼈劫持数据报⽂,提取公钥S并保存好,然后将被劫持报⽂中的公钥S替换成为⾃⼰的公钥M,并将伪造报⽂发给客⼾端
5. 客⼾端收到报⽂,提取公钥M(⾃⼰当然不知道公钥被更换过了),⾃⼰形成对称秘钥X,⽤公钥M加密X,形成报⽂发送给服务器
6. 中间⼈劫持后,直接⽤⾃⼰的私钥M'进⾏解密,得到通信秘钥X,再⽤曾经保存的服务端公钥S加密后,将报⽂推送给服务器
7. 服务器拿到报⽂,⽤⾃⼰的私钥S'解密,得到通信秘钥X
8. 双⽅开始采⽤X进⾏对称加密,进⾏通信。但是⼀切都在中间⼈的掌握中,劫持数据,进⾏窃听甚⾄修改,都是可以的.

上⾯的攻击⽅案,同样适⽤于⽅案2,⽅案3?
问题本质出在哪⾥了呢?

1.中间人可以对数据做篡改

2.客户端⽆法确定收到的含有公钥的数据报⽂,就是⽬标服务器发送过来的! 

CA认证

理解证书

        服务端在使⽤HTTPS前,需要向CA机构申领⼀份数字证书,数字证书⾥含有证书申请者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书⾥获取公钥就⾏了,证书就如⾝份证,证明服务端公钥的权威性.CA机构就相当于是政府.

        以上是一个宏观流程,首先第一步服务端要想CA机构申请证书,信息包括公钥对与私钥对,域名,申请者等信息。然后等待CA机构的审核,审核完成后会签发一个证书,该证书包括明文信息+数字签名,其中明文信息就包括域名,公钥等信息;

数字签名

        先把明文信息利用哈希散列函数生成一个固定长度的摘要,然后再对该摘要利用CA机构的私钥进行加密,CA机构的私钥世界上只有CA机构自己知道,其他人都无法知道。然后最后得到的就是数字签名。

明文信息和数字签名合在一起,便构成了一个完整的证书


客户端认证

        当服务端成功得到证书后,后续服务端与客户端的通信便不再传输公钥,而是直接传输证书。证书中包含了公钥等信息。

客户端进⾏认证:
当客⼾端获取到这个证书之后,会对证书进⾏校验(防⽌证书是伪造的).
        • 判定证书的有效期是否过期
        • 判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构).
        • 验证证书是否被篡改:从系统中拿到该证书发布机构的公钥,对签名解密,得到⼀个hash值(数据摘要),设为hash1.然后计算整个证书的hash值,设为hash2.对⽐hash1和?hash2是否相等.如
果相等,则说明证书是没有被篡改过的.


常见问题

中间人有没有可能篡改该证书?

答案是不可能的.
• 由于他没有CA机构的私钥,所以⽆法hash之后⽤私钥加密形成签名,那么也就没法办法对篡改后的证书形成匹配的签名
• 如果强⾏篡改,客⼾端收到该证书后会发现明⽂和签名解密后的值不⼀致,则说明证书已被篡改,证书不可信,从⽽终⽌向服务器传输信息,防⽌信息泄露给中间⼈.

为什么摘要内容在网络传输的时候⼀定要加密形成签名?

        在网络传输中,摘要内容加密形成签名的目的是确保传输的数据的完整性和认证性
        数字签名是使用私钥对 摘要进行加密的过程。发送方使用私钥对 摘要进行签名,然后接收方使用相应的公钥来验证签名的有效性。通过这种方式,接收方可以确定消息是否被篡改过。(上面说了)
        在传输过程中,如果仅仅传输原始数据,没有进行签名或加密,那么中间的攻击者有可能窃听、篡改或伪造数据。通过对摘要进行加密形成签名后,并将签名与原始数据一起传输,可以在接收方进行验证。如果签名验证通过,接收方可以确信数据的完整性和认证性。
        通过加密形成的签名,保证了数据在传输过程中不受篡改,并且验证了数据的来源身份。这为保护数据的安全性和可信性提供了一定的保障,尤其在网络通信中更为重要。

下面这就是不加密的例子:

假设我们的证书只是⼀个简单的字符串hello,对这个字符串计算hash值(⽐如md5),结果为
BC4B2A76B9719D91
如果hello中有任意的字符被篡改了,⽐如变成了hella,那么计算的md5值就会变化很⼤.
BDBD6F9CF51F2FD8
然后我们可以把这个字符串hello和哈希值BC4B2A76B9719D91从服务器返回给客⼾端,此时客⼾端
如何验证hello是否是被篡改过

那么就只要计算hello的哈希值,看看是不是BC4B2A76B9719D91即可.

但是还有个问题,如果⿊客把hello篡改了,同时也把哈希值重新计算下,客⼾端就分辨不出来了.

所以被传输的哈希值不能传输明⽂,需要传输密⽂

https完整流程 

左侧都是客户端做的事情,右侧都是服务器做的事情.

总结:

HTTPS ⼯作过程中涉及到的密钥有三组. 

第⼀组(⾮对称加密):⽤于校验证书是否被篡改.服务器持有私钥(私钥在形成CSR⽂件与申请证书时获得),客户端持有公钥(操作系统包含了可信任的CA认证机构有哪些,同时持有对应的公钥).服务器在客户端请求时,返回携带签名的证书.客户端通过这个公钥进⾏证书验证,保证证书的合法性,进⼀步保证证书中携带的服务端公钥权威性。

第⼆组(⾮对称加密):⽤于协商⽣成对称加密的密钥.客⼾端⽤收到的CA证书中的公钥(是可被信任的)给随机⽣成的对称加密的密钥加密,传输给服务器,服务器通过私钥解密获取到对称加密密钥.

第三组(对称加密):客⼾端和服务器后续传输的数据都通过这个对称密钥加密解密.

到这里https的全部内容就完成了.

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

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

相关文章

【Spring Boot 源码学习】深入 FilteringSpringBootCondition

走近 AutoConfigurationImportFilter 引言往期内容主要内容1. match 方法2. ClassNameFilter 枚举类3. filter 方法 总结 引言 前两篇博文笔者带大家从源码深入了解了 Spring Boot 的自动装配流程,其中自动配置过滤的实现由于篇幅限制,还未深入分析。 …

2023国赛数学建模C题思路模型 - 蔬菜类商品的自动定价与补货决策

# 1 赛题 在生鲜商超中,一般蔬菜类商品的保鲜期都比较短,且品相随销售时间的增加而变差, 大部分品种如当日未售出,隔日就无法再售。因此, 商超通常会根据各商品的历史销售和需 求情况每天进行补货。 由于商超销售的蔬菜…

uniapp使用webview将页面转换成图片支持h5、app、小程序

uniapp使用webview将页面转换成图片支持h5、app、小程序 在uniapp项目中新建主页和webview页面 index.vue代码 <template><view><!-- 微信小程序要设置src为网络路径 --><web-view src"/hybrid/html/webview.html"></web-view><…

十四、内置模块path、邂逅Webpack和打包过程、css-loader

一、内置模块path &#xff08;1&#xff09;path介绍 &#xff08;2&#xff09; path常见的API 这里重点讲一下path.resolve()。 看上面的例子&#xff0c;从右往左开始解析&#xff0c;所以一开始解析的就是 /abc.txt &#xff0c;这个时候就会把它当成一个绝对路径了&am…

C#,数值计算——用于积分函数与方法的Stiel类的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public class Stiel { public class pp : UniVarRealValueFun, RealValueFun { public Stiel st { get; set; } null; public pp() { } public doubl…

探索数据库管理的利器 - PHPMyAdmin

有一个项目&#xff0c;后端由博主独自负责&#xff0c;最近需要将项目交接给另一位同事。在项目初期&#xff0c;博主直接在数据库中使用工具创建了相关表格&#xff0c;并在完成后利用PhpMyAdmin生成了一份数据字典&#xff0c;供团队使用。然而&#xff0c;在随后的开发过程…

JDK1.8下载、安装和环境配置使用

JDK1.8下载、安装和配置 下载安装包解压文件配置测试安装 下载安装包 链接地址 https://pan.baidu.com/s/1RF7-ulq0_qAelpXskDxdvA 提取码 d1y0解压文件 jdk1.8.0_181 配置 右击我的电脑&#xff0c;选择属性 2.点击高级系统设置 在系统变量区里点击&#xff1a;新建…

听书网站模板源码 懒人书院网站源码 苹果cms手机听书网站模版源码 支持手机端

苹果cms超漂亮UI高仿芒果TV听书网站模板带手机端。 手机版修改logo&#xff0c;ting_wap/images/logo.png 电脑版修改logo&#xff0c;ting_pc/img/logo.png 编辑推荐后台推荐5颗星。 新势力/热播榜单后台推荐9颗星。

3D基础:Y-Up和Z-Up

推荐&#xff1a;用 NSDT编辑器快速搭建可编程3D场景 所有 3D 工具都包含具有 X、Y 和 Z 轴的 3 维环境。 这些工具中的 X 轴方向相同&#xff0c;即使用前视图时从左到右的水平线。 但是&#xff0c;不同的 3D 工具可能具有不同的 Y 轴和 Z 轴方向。 有些3D工具是Y-Up的&…

西门子S7-200 SMART软件的下载安装步骤

文章目录 1、软件下载2、软件安装 1、软件下载 访问西门子官网&#xff1a;https://www.siemens.com/cn/zh.html&#xff0c;进入后在左上角产品与服务&#xff0c;依次进入该目录&#xff1a; 实在找不到在右上角放大镜直接搜索smart200 点击进入即可&#xff0c;然后就进入…

浅谈安科瑞ADL200仪表在爱尔兰工厂的应用

摘要&#xff1a;用户端消耗着整个电网80%的电能&#xff0c;用户端智能化用电管理对用户可靠、安全、节约用电有十分重要的意义。构建智能用电服务体系&#xff0c;推广用户端智能多功能仪表、智能用电管理终端等设备用电管理解决方案&#xff0c;实现电网与用户的双向良性互动…

第 2 章 线性表 (线性表的静态单链表存储结构(一个数组可生成若干静态链表)实现)

1. 背景说明 静态单链表实现类似于单链表&#xff0c;只是指针域变成了数组下标。 2. 示例代码 1) status.h /* DataStructure 预定义常量和类型头文件 */#ifndef STATUS_H #define STATUS_H/* 函数结果状态码 */ #define TRUE 1 /* 返回值为真 */ #define FALSE …

从策略到执行:实施战略定位的实战手册

有了完美的战略定位蓝图&#xff0c;但如果不知道如何执行&#xff0c;那一切都是徒劳。今天&#xff0c;我们将揭示从策略到执行的战略定位秘密路径。首先我们先明确一下战略定位的相关概念以及实施战略定位的用途。 战略定位是什么意思? 战略定位可以视为企业在市场或竞争环…

Jetpack Compose 教程

一、简介 Jetpack Compose 是用于构建原生 Android 界面的新工具包。它使用更少的代码、强大的工具和直观的 Kotlin API&#xff0c;可以帮助您简化并加快 Android 界面开发。 在本教程中&#xff0c;您将使用声明性的函数构建一个简单的界面组件。您无需修改任何 XML 布局&am…

读高性能MySQL(第4版)笔记04_操作系统和硬件优化

1. 从软件本身和它运行的典型工作负载来看&#xff0c;MySQL通常也更适合运行在廉价硬件上 2. 基本资源 2.1. CPU 2.2. 内存 2.3. 磁盘 2.4. 瓶颈 2.5. 网络资源 3. CPU 3.1. 最常见的瓶颈是CPU耗尽 3.2. 检查CPU使用率来确定工作负载是否受CPU限制 3.3. 低延迟&…

JavaScipt中如何实现函数缓存?函数缓存有哪些场景?

1、函数缓存是什么&#xff1f; 函数缓存就是将函数运行的结果进行缓存。本质上就是用空间&#xff08;缓存存储&#xff09;换时间&#xff08;计算过程&#xff09; 常用于缓存数据计算结果和缓存对象。 缓存只是一个临时的数据存储&#xff0c;它保存数据&#xff0c;以便将…

异步编程 - 09 Spring框架中的异步执行_@Async注解异步执行原理源码解析

文章目录 概述小结好文推荐 概述 在Spring中调用线程将在调用含有Async注释的方法时立即返回&#xff0c;Spring是如何做到的呢&#xff1f;其实是其对标注Async注解的类做了代理&#xff0c;比如下面的类Async-AnnotationExample。 public class AsyncAnnotationExample {As…

Qt 5.15集成Crypto++ 8.8.0(MSVC 2019)笔记

一、背景 笔者已介绍过在Qt 5.15.x中使用MinGW&#xff08;8.10版本&#xff09;编译并集成Crypto 8.8.0。 但是该编译出来的库&#xff08;.a和.dll&#xff09;不适用MSVC&#xff08;2019版本&#xff09;构建环境&#xff0c;需要重新编译&#xff08;.lib或和.dll&#xf…

C++11新特性② | 左值、左值引用、右值与右值引用

目录 1、引言 2、值类别及相关概念 3、左值、右值 4、左值引用、右值引用 5、移动语义 5.1、为什么需要移动语义 5.2、移动语义定义 5.3、转移构造函数 5.4、转移赋值函数 6、标准库函数 std::move 7、完美转发 std::forward VC常用功能开发汇总&#xff08;专栏文章…

Mybatis 使用typeHandler自定义类型转换

之前我们介绍了使用Mybatis完成数据的增删改查操作&#xff1b;本篇我们介绍使用Mybatis提供的typeHandler自定义类型转换。 如果您对Mybatis的增删改查操作不太了解&#xff0c;可以参考&#xff1a; Mybatis 查询数据https://blog.csdn.net/m1729339749/article/details/13…