【计算机网络】HTTPS协议详解
文章目录
一、HTTPS协议 介绍
1、1 HTTP协议不安全的体现
1、2 什么是 HTTPS协议
二、加密的一些概念
2、1 怎么理解加密
2、2 为什么要加密
2、3 常见的加密方式
2、2、1 对称加密
2、2、2 非对称加密
三、HTTPS协议探究加密过程
3、1 只使用对称加密
3、2 只是用非对称加密
3、3 双方都是用对称加密
3、4 非对称加密+对称加密
3、5 非对称加密+对称加密+证书认证
3、5、1 引入证书
3、5、2 数据摘要(数字指纹)与数字签名
3、5、3 非对称加密+对称加密+证书认证 详解(安全的)
3、5、4 中间人能够篡改证书吗
3、5、5 中间人能够掉包证书吗
四、总结
4、1 为什么摘要内容在网络传输的时候一定要加密形成签名
4、2 为什么签名不直接加密,而是要先hash形成摘要
4、3 HTTPS请求与相应整个过程
🙋♂️ 作者:@Ggggggtm 🙋♂️
👀 专栏:计算机网络 👀
💥 标题:HTTPS协议 💥
❣️ 寄语:与其忙着诉苦,不如低头赶路,奋路前行,终将遇到一番好风景 ❣️
一、HTTPS协议 介绍
1、1 HTTP协议不安全的体现
上篇文章(HTTP协议详解)我们详细讲解了HTTP协议后,我们发现HTTP协议并不是安全的。HTTP协议相对来说不安全的原因主要包括以下几点:
数据传输的明文:HTTP协议传输的数据是明文的,即未经过加密处理。这使得任何人都可以截获传输的数据并进行监听、分析或篡改,导致数据的安全性受到威胁。
缺乏数据完整性校验:HTTP协议没有对传输的数据进行完整性校验的机制,意味着在传输过程中数据可能会被篡改,而无法被检测到。这样的情况下,用户可能会收到被篡改后的信息,从而给恶意攻击者提供了可乘之机。
缺乏身份验证机制:HTTP协议本身没有提供对服务器或客户端身份进行验证的机制。这意味着服务器无法确保与其通信的客户端的真实身份,而客户端也无法确认服务器的真实性。恶意攻击者可以利用这一点进行中间人攻击,窃取用户的敏感信息或伪装成受信任的服务器。
因此,为了解决了HTTP的安全性问题,就对HTTP进行了完善,于是形成了HTTPS协议。
1、2 什么是 HTTPS协议
HTTPS协议是对HTTP协议的一种扩展,它在HTTP的基础上加入了SSL/TLS协议进行数据加密和认证。这使得通过HTTPS传输的数据更加安全可靠
通过使用HTTPS协议,数据在传输过程中得到了保护,有效防止了恶意攻击者窃听、篡改或伪造数据。这使得HTTPS成为保护网站安全和用户隐私的重要工具。
这里有很多疑问:首先什么是加密?加密的过程是什么?怎么将数据就保护起来了?后文会一一进行详细解释的。
二、加密的一些概念
2、1 怎么理解加密
加密是一种将信息转化为无法直接理解或解读的形式的过程。它通过使用密码算法将明文(原始信息)转换为密文(加密后的信息),从而保护数据的安全性和隐私。
在加密过程中,密钥是关键要素。密钥是一个用于加密和解密数据的特殊代码或字符串。通过正确使用密钥,可以将明文转换为密文,而只有拥有正确密钥的人才能将密文还原为明文。
举个例子理解一下加密。83版<<⽕烧圆明园>>,有人要谋反干掉慈禧太后。恭亲王奕䜣给慈禧递的折子。折子内容只是扯一扯家常,套上一张挖了洞的纸就能看到真实要表达的意思。
整个加密解密的过程如下:
- 明文:"当心肃顺,端华,戴恒"(这几个人都是当时的权臣,后来被慈禧⼀锅端)。
- 密文:奏折全文(也就是扯的家常)。
密钥:挖了洞的纸。
2、2 为什么要加密
加密在保护个人隐私、确保数据传输的机密性和完整性方面发挥着重要作用。它被广泛应用于在线支付、数字签名、虚拟私人网络(VPN)、安全电子邮件等领域,以确保敏感信息在传输和存储过程中不被未经授权的人获得或篡改。
2、3 常见的加密方式
加密可以分为对称加密和非对称加密两种类型。对称加密使用相同的密钥进行加密和解密,简单高效,但密钥的分发和管理比较困难。非对称加密则使用一对密钥:公钥和私钥。公钥用于加密数据,私钥用于解密数据。非对称加密更安全,但计算资源消耗较大。
2、2、1 对称加密
什么是对称加密,以及对称加密的特征:
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密,特征:加密和解密所用的密钥是相同的。
- 常见对称加密算法(了解):DES、3DES、AES、TDEA、Blowfish、RC2等。
特点:算法公开、计算量小、加密速度快、加密效率高。
对称加密其实就是通过同⼀个"密钥",把明文加密成密文,并且也能把密文解密成明文。举个例子理解一下对称加密。
一个简单的对称加密,按位异或。假设明文a= 1234,密钥key = 8888。则加密a^ key得到的密文b为9834。然后针对密文9834再次进行运算b ^key,得到的就是原来的明文1234(对于字符串的对称加密也是同理,每一个字符都可以表示成一个数字)。当然,按位异或只是最简单的对称加密。HTTPS中并不是使用按位异或,实际上也比这个要复杂很多。
2、2、2 非对称加密
什么是非对称加密,非对称加密的特征又有哪些:
- 需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。
- 常见非对称加密算法(了解):RSA,DSA,ECDSA。
- 特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。
非对称加密要用到两个密钥,一个叫做"公钥",一个叫做"私钥"。公钥和私钥是配对的。最大的缺点就是运算速度非常慢,比对称加密要慢很多。
- 通过公钥对明文加密,变成密文。
- 通过私钥对密文解密,变成明文也可以反着用。
- 通过私钥对明文加密,变成密文。
- 通过公钥对密文解密,变成明文。
以下是一个简单的例子来说明非对称加密的工作原理:
- 假设Bob想要向Alice发送一条秘密消息。首先,Alice会生成一对密钥:一个是公钥,另一个是私钥。然后,Alice将公钥发送给Bob,而私钥则保密。
- 当Bob想要发送一条消息给Alice时,他会使用Alice的公钥对消息进行加密。只有Alice持有相应的私钥才能解密该消息。
- Bob使用Alice的公钥将消息加密后,他将加密后的消息发送给Alice。即使其他人拦截到了这条加密的消息,由于他们没有私钥,无法解密消息内容。
- 当Alice收到加密的消息后,她使用自己的私钥进行解密,从而还原出Bob最初发送的明文消息。
这个例子说明了非对称加密的过程。通过使用不同的密钥进行加密和解密,非对称加密提供了更高的安全性,因为私钥不需要与他人共享,只有拥有私钥的人才能解密和访问数据。
三、HTTPS协议探究加密过程
3、1 只使用对称加密
当只使用对称加密,理论上是可以的,但实际上似乎并不可以。为什么呢?理论上,客服端和服务器都有一个相同的密钥,而且就是针对一个对称加密形成的。且没有别人知道,这两方的通信安全当然是可以被保证的。
引入对称加密之后,即使数据被截获,由于黑客不知道密钥是啥,因此就无法进行解密,也就不知道请求的真实内容是啥了。
但是,双方怎么又对称密钥中的同一个密钥呢? 但是如果直接把密钥明文传输,那么黑客也就能获得密钥了。此时后续的加密操作就形同虚设了。这样做显眼是不行的。
因此密钥的传输也必须加密传输。加密传输的前提是服务器能够解密才行啊!!!这样好像就陷入的先有鸡还是先有蛋的问题。实际上这种方法是行不通的。
即使双方有同一个密钥,但事情也没那么简单。服务器同一时刻其实是给很多客户端提供服务的。这么多客户端,每个人用的秘钥都必须是不同的(如果是相同那密钥就太容易扩散了,黑客就也能拿到了)。因此服务器就需要维护每个客户端和每个密钥之间的关联关系,这也是个很麻烦的事情。
3、2 只是用非对称加密
非对称加密是由一把公钥和一把私钥的。鉴于非对称加密的机制,如果服务器先把公钥以明文方式传输给浏览器,之后浏览器向服务器传数据前都先用这个公钥加密好再传,从客户端到服务器信道似乎是安全的(有安全问题),因为只有服务器有相应的私钥能解开公钥加密的数据。
确实,这样保证的客户端向服务器发送信息是安全的。但是服务器向客服端相应呢?有人说:服务器可以用私钥进行加密,然后客户端用公钥揭秘不就行了。但是这个公钥是一开始通过明文传输给浏览器的,若这个公钥被中间人劫持到了,那他也能用该公钥解密服务器传来的信息了。 这样不能确保服务器向客服端发送信息的安全!
3、3 双方都是用对称加密
服务端拥有公钥S与对应的私钥S',客户端拥有公钥C与对应的私钥C'。客户和服务端交换公钥:
- 客户端绐服务端发信息:先用S对数据加密,再发送,只能由服务器解密,因为只有服务器有私钥。
- 服务端给客户端发信息:先用C对数据加密,在发送,只能由客户端解密,因为只有客户端有私钥。
具体如下图:
首先,非对称加密效率并不理想。其次这任然是有安全问题的,具体什么安全问题,下小节(3、4)会给出具体解答。大家也可先思考一下有什么安全问题。
3、4 非对称加密+对称加密
由于非对称加密的效率问题,我们这里使用对称加密+非对称加密先解决一下效率问题。先来了解一下使用对称加密+非对称加密的思路:
- 服务端具有非对称公钥S和私钥S'。
- 客户端发起https请求,获取服务端公钥S。
- 客户端在本地生成对称密钥C,通过公钥S加密,发送给服务器。
- 由于中间的网络设备没有私钥,即使截获了数据,也无法还原出内部的原文,也就无法获取到对称密钥(真的吗?)。
- 服务器通过私钥S'解密,还原出客户端发送的对称密钥C.并且使用这个对称密钥加密给客户端返回的响应数据。
- 后续客户端和服务器的通信都只用对称加密即可.由于该密钥只有客户端和服务器两个主机知道,其他主机/设备不知道密钥即使截获数据也没有意义。
- 由于对称加密的效率比非对称加密高很多,因此只是在开始阶段协商密钥的时候使用非对称加密,后续的传输仍然使⽤对称加密。
具体思路也可结合下图理解:
但是上述情况真的安全了吗?其实依然有安全问题。并且这里的安全问题与上小节(3、3)的安全问题是相同的。我们都忽略的如果在最开始中间人就已经开始攻击了呢?
中间人在最开始进行攻击:在服务器与客户端请求公钥时,就开始攻击。具体思路如下:
- 服务器具有非对称加密算法的公钥S,私钥S'。
- 中间人具有非对称加密算法的公钥M,私钥M' 。
- 客户端向服务器发起请求,服务器明文传送公钥S给客户端。
- 中间人劫持数据报文,提取公钥S并保存好,然后将被劫持报文中的公钥S替换成为自己的公钥M,并将伪造报文发给客户端。
- 客户端收到报文,提取公钥M(自己当然不知道公钥被更换过了),自己形成对称秘钥X,用公钥M加密X,形成报文发送给服务器。
- 中间人劫持后,直接用自己的私钥M'进行解密,得到通信秘钥X,再用曾经保存的服务端公钥S加密后,将报文推送给服务器。
- 服务器拿到报文,用自己的私钥S'解密,得到通信秘钥X。
- 双方开始采用X进行对称加密,进行通信。但是一切都在中间人的掌握中,劫持数据,进行窃听甚至修改,都是可以的。
但这里,我们再次思考一下:为什么中间能够成功的攻击呢,本质是什么?本质就在于中间人能够随意篡改数据,而且客服端无法很好的验证收到的公钥就是来自目标服务器的。
3、5 非对称加密+对称加密+证书认证
3、5、1 引入证书
服务端在使用HTTPS前,需要向CA机构申领一份数字证书,数字证书⾥含有证书申请者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书里获取公钥就行了,证书就如身份证,证明服务端公钥的权威性。
该证书所包含的主要信息如下:
证书持有人信息:证书中包含了证书持有人的身份信息,如姓名、电子邮件地址、组织名称等。这些信息用于确保证书的有效性和唯一性。
证书持有人的公钥:证书中包含了证书持有人的公钥。公钥是加密通信中的重要组成部分,用于加密数据和验证签名。
证书颁发机构信息:证书中包含了颁发该证书的证书颁发机构的信息,如名称、网址等。这些信息用于验证证书颁发机构的可信度和信任链。
证书序列号:证书中包含了唯一的证书序列号,用于标识该证书的唯一性。
证书的有效期限:证书中包含了证书的有效期限,即该证书的使用期限。过期的证书将不再被信任和接受。
数字签名:证书中包含了由证书颁发机构使用其私钥对证书内容进行加密生成的数字签名。数字签名用于验证证书的完整性和真实性。
当服务端申请CA证书的时候,CA机构会对该服务端进⾏审核,并专⻔为该⽹站形成数字签名,过程如下:
- CA机构拥有非对称加密的私钥A和公钥A'。
- CA机构对服务端申请的证书明文数据进行hash,形成数据摘要。
然后对数据摘要用CA私钥A'加密,得到数字签名S。
服务端申请的证书明文和数字签名S共同组成了数字证书,这样一份数字证书就可以颁发给服务端了。
上述的概念中引出了 数据摘要(数字指纹)与数字签名 新的概念。下面我们先来解释一下这两个概念,后续会更好的理解。
3、5、2 数据摘要(数字指纹)与数字签名
数据摘要(也称为数字指纹)是指通过一种算法将任意长度的数据转换成固定长度的二进制字符串。这个转换过程使得不同的数据很难产生相同的数字指纹,同时保证相同的数据始终能够生成相同的数字摘要。
数字摘要有以下几个特点:
唯一性:理论上,不同的数据生成的数字摘要应该是唯一的。即使数据中只有微小的差异,生成的数字指纹也会有显著的变化。
不可逆性:数字指纹的生成算法具有不可逆性,不能通过数字指纹还原出原始数据。这样可以保护原始数据的机密性。
固定长度:生成的数字指纹具有固定的长度。不论输入数据多长,都会生成指定长度的数字指纹。
敏感性:对于输入数据的微小改动,生成的数字指纹也会有较大的差异。这使得数字指纹可以用于检测数据是否被篡改。
数字签名是一种用于验证电子文档或数据完整性和真实性的技术手段。它类似于传统纸质文件的签名,在数字领域提供了身份认证、数据完整性保护和防止抵赖等功能。
数字签名的基本原理如下:
私钥和公钥:数字签名使用非对称加密算法。签名者拥有一对密钥,其中一个是私钥,用于生成数字签名;另一个是公钥,用于验证签名。
数据摘要:签名者首先对原始数据(例如文件或信息)进行哈希计算,生成唯一的数据摘要(也称为消息摘要或哈希值)。数据摘要的作用是将数据压缩成固定长度的字符串,具备唯一性和不可逆性。
数字签名生成:签名者使用私钥对数据摘要进行加密操作,生成数字签名。只有使用相应公钥可以验证数字签名的合法性。
数字签名验证:接收者获取到原始数据、数字签名和签名者的公钥。接收者使用签名者的公钥(CA公钥是公开的)对数字签名进行解密操作,得到解密后的数据摘要。然后,接收者对原始数据进行同样的哈希计算,生成新的数据摘要。最后将两个数据摘要进行比较,如果相同,则说明数据完整且未被篡改,数字签名有效。
具体也可结合下图理解:
3、5、3 非对称加密+对称加密+证书认证 详解(安全的)
有了证书,那么服务器再向客户端发送自己的公钥时,就会结合证书一起发送。在客户端和服务器刚⼀建⽴连接的时候,服务器给客户端返回一个证书,证书包含了之前服务端的公钥,也包含了网站的身份信息。虽然证书也时明文发送,但是证书是安全的。因为客户端是由较为完善的验证:
客户端请求:当客户端与服务器进行通信时,服务器会将其CA证书发送给客户端。
证书解析:客户端收到服务器的证书后,首先会对证书进行解析,提取其中的信息。
CA证书验证:客户端使用预先内置或可信任的根证书(Root Certificate)或中间证书(Intermediate Certificate)对接收到的CA证书进行验证。
验证签名:接收者获取到原始数据、数字签名和签名者的公钥(公钥也可能会在浏览器中保存)。接收者使用签名者的公钥(CA公钥是公开的)对数字签名进行解密操作,得到解密后的数据摘要。然后,接收者对原始数据进行同样的哈希计算,生成新的数据摘要。最后将两个数据摘要进行比较,如果相同,则说明数据完整且未被篡改,数字签名有效。
证书链验证:如果颁发该证书的证书颁发机构是中间证书颁发机构,客户端还需要使用内置的根证书验证其合法性。这个验证过程称为证书链验证,确保整个证书链的信任和完整性。
证书有效期验证:客户端检查证书中的有效期限,确保该证书仍在有效期内。过期的证书将被认为不受信任。
身份和安全性确认:一旦通过以上验证过程,客户端可以确认服务器的身份和证书的安全性。客户端会使用服务器证书中包含的公钥对通信过程中的数据进行加密,并根据证书中的身份信息来判断是否信任该服务器。
举例说明验证的过程: 假设用户在浏览器中访问一个网站(如https://www.example.com):
当浏览器连接到该网站后,服务器会将其CA证书发送给浏览器。
浏览器收到证书后,会解析证书并提取其中的信息。
浏览器会检查证书中的数字签名,并使用预先内置的根证书或中间证书对签名进行验证。
如果数字签名验证成功,浏览器继续检查证书链,并使用根证书验证中间证书的合法性验证成功,浏览器会检查证书的有效期限,确保该证书仍一旦通过以上验证过程,浏览器可以确认服务器的身份和证书的安全性,在与服务器进行通信时使用证书中的公钥对数据进行加密。
这样,通过CA证书的验证过程,确保了网络通信中的安全性和身份的真实性。
3、5、4 中间人能够篡改证书吗
中间人有没有可能篡改该证书?
- 假如中间人篡改了证书的明文,由于他没有CA机构的私钥,所以无法hash之后用私钥加密形成签名,那么也就没法办法对篡改后的证书形成匹配的签名!
- 如果强行篡改,客户端收到该证书后会发现明文和签名解密后的值不一致,则说明证书已被篡改,证书不可信,从而终止向服务器传输信息,防止信息泄露给中间人。
3、5、5 中间人能够掉包证书吗
中间人能够掉包证书吗?
- 因为中间人没有CA私钥,所以无法制作假的证书。
- 所以中间人只能向CA申请真证书,然后用自己申请的证书进行掉包。
- 这个确实能做到证书的整体掉包,但是别忘记,证书明文中包含了域名等服务端认证信息,如果整体掉包,客户端依旧能够识别出来。
- 永远记住:中间人没有CA私钥,所以对任何证书都无法进行合法修改,包括自己的。
四、总结
4、1 为什么摘要内容在网络传输的时候一定要加密形成签名
常见的摘要算法包括MD5、SHA-1、SHA-256等。下面主要介绍一下MD5算法及其特点。MD5(Message Digest Algorithm 5)是一种广泛使用的摘要算法,用于将任意长度的数据转换为固定长度的128位摘要值。以下是MD5算法的一些特点:
固定长度输出:MD5算法生成的摘要值是固定长度的128位(32个十六进制字符)。无论输入数据的长度如何,其产生的摘要值始终具有相同的长度。
不可逆性:MD5算法是单向散列函数,无法通过摘要值反推出原始数据。这意味着无法根据摘要值还原出原始数据,摘要值只能用于数据的验证和比对。
碰撞可能性:尽管MD5算法广泛使用,但它存在碰撞的风险。碰撞是指两个不同的数据输入经过MD5算法处理后得到相同的摘要值。随着计算机计算能力的增强,针对MD5的碰撞攻击变得更加可行,因此在安全性要求较高的场景下,建议选用更安全的摘要算法。
快速计算:相比于其他哈希算法,MD5算法的计算速度相对较快。这使得MD5在一些需要快速生成摘要值的场景中得到广泛应用,如密码校验、数据完整性验证等。
正因为MD5有这样的特性,我们可以认为如果两个字符串的MD5值相同,则认为这两个字符串相同。理解判定证书篡改的过程:(这个过程就好比判定这个身份证是不是伪造的身份证)
- 假设我们的证书只是一个简单的字符串 hello,对这个字符串计算hash值(比如md5),结果为BC4B2A76B9719D91。
- 如果hello中有任意的字符被篡改了,比如变成了hella,那么计算的md5值就会变化很大.BDBD6F9CF51F2FD8。
- 然后我们可以把这个字符串 hello和哈希值BC4B2A76B9719D91从服务器返回给客户端,此时客户端就能够验证hello是否是被篡改过。如何验证hello是否是被篡改过?很加单,那么就只要计算hello 的哈希值,看看是不是BC4B2A76B9719D91即可。
但是还有个问题,如果黑客把hello篡改了,同时也把哈希值重新计算下,客⼾端就分辨不出来了呀。
所以被传输的哈希值不能传输明文,需要传输密文。所以,对证书明文(这里就是“hello”)hash形成散列摘要,然后CA使用自己的私钥加密形成签名,将hello和加密的签名合起来形成CA证书,颁发给服务端,当客户端请求的时候,就发送给客户端,中间人截获了,因为没有CA私钥,就无法更改或者整体掉包,就能安全的证明,证书的合法性。最后,客户端通过操作系统里已经存的了的证书发布机构的公钥进行解密,还原出原始的哈希值,再进行校验。
4、2 为什么签名不直接加密,而是要先hash形成摘要
签名不直接加密而是要先进行哈希处理形成摘要是为了确保签名的安全性和效率。下面是原因:
安全性:通过将消息进行哈希处理,可以将任意长度的消息压缩成固定长度的摘要。这样做有助于提高签名算法的安全性,因为签名算法通常基于对固定长度的数据进行操作。通过使用哈希函数,可以固定消息的长度,并且摘要的计算具备单向性,即无法从摘要反推出原始消息。这增强了签名算法对篡改和伪造攻击的抵抗能力。
效率:直接对长消息进行签名可能会导致较长的计算时间和更大的存储需求。通过首先对消息进行哈希运算,可以将消息的长度缩减到较小的固定长度。这样可以提高签名和验证的效率,同时减少所需的存储空间。哈希函数的计算比直接进行加密和解密的速度更快。
适应性:使用摘要还可以使针对哈希函数设计的特殊优化算法(例如SHA-256等)与签名算法配合使用。这些哈希函数已被广泛研究和测试,并证明其在保持安全性的同时具有较高的计算效率。所以,通过将哈希函数与签名算法结合使用,可以获得更好的性能和安全性。
4、3 HTTPS请求与相应整个过程
HTTPS共作过程中涉及到的密钥有三组:
- 第⼀组(非对称加密):用于校验证书是否被篡改。服务器持有私钥(私钥在形成CSR文件与申请证书时获得),客户端持有公钥(操作系统包含了可信任的CA认证机构有哪些,同时持有对应的公钥)。服务器在客⼾端请求是,返回携带签名的证书。客户端通过这个公钥进行证书验证,保证证书的合法性,进⼀步保证证书中携带的服务端公钥权威性。
- 第二组(非对称加密):用于协商生成对称加密的密钥。客户端用收到的CA证书中的公钥(是可被信任的)给随机生成的对称加密的密钥加密,传输给服务器,服务器通过私钥解密获取到对称加密密钥。
- 第三组(对称加密):客户端和服务器后续传输的数据都通过这个对称密钥加密解密。
其实⼀切的关键都是围绕这个对称加密的密钥。其他的机制都是辅助这个密钥工作的。第二组非对称加密的密钥是为了让客户端把这个对称密钥传给服务器。第⼀组非对称加密的密钥是为了让客户端拿到第⼆组非对称加密的公钥。
相关文章:
【计算机网络】HTTPS协议详解
文章目录 一、HTTPS协议 介绍 1、1 HTTP协议不安全的体现 1、2 什么是 HTTPS协议 二、加密的一些概念 2、1 怎么理解加密 2、2 为什么要加密 2、3 常见的加密方式 2、2、1 对称加密 2、2、2 非对称加密 三、HTTPS协议探究加密过程 3、1 只使用对称加密 3、2 只是用非对称加密 3…...
Septentrio接收机二进制的BDS b2b改正数解码
Galileo的HAS和BDS B2b改正数为实时PPP提供了可能,要实现实时PPP解算,必须对对应的数据进行解码。由于没有做过解码的工作,现结合qzsl6tool代码对Septentrio的解码代码进行学习。 1. 二进制枕头的识别和解码 定义一个读取数据的类ÿ…...
nvm 管理 node版本
下载地址 https://nvm.uihtm.com/download.html 基础命令 查看所有可安装的node版本 nvm list available 查看本地已经安装的所有版本: nvm list 安装指定的node版本 nvm install 14.18.1 使用指定node版本 nvm use 14.18.1 卸载指定node版本 nvm uninstall …...
LeetCode 15.三数之和
三数之和 问题描述 LeetCode 15.三数之和 给你一个整数数组 nums,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k,同时还满足 nums[i] nums[j] nums[k] 0。请你返回所有和为 0 且不重复的三元组。 注意:答…...
Linux实用操作(固定IP、进程控制、监控、文件解压缩)
目录 一、快捷键 1、ctrl c强制停止 2、ctrl d退出或登出 3、历史命令搜索history 4、光标移动快捷键 5、清屏 二、软件安装 1、CentOS的yum命令 2、Ubantu的apt命令 三、systemctl命令 四、软连接 五、日期、时区 1、date命令 2、修改Linux时区为东八区 3、nt…...
Redis高可用之哨兵模式、集群
文章目录 一、Redis哨兵模式1.1 简介1.2 哨兵模式的作用1.3 哨兵结构1.4 故障转移机制(重要)1.5 主节点选举机制 二、部署Redis哨兵模式Step1 修改 Redis 哨兵模式的配置文件(所有节点操作)Step2 实现基于VIP(虚拟IP&a…...
Python数据攻略-DataFrame的创建与基础特性
在数据分析、科学计算或者任何需要处理表格数据的领域,DataFrame都是一个非常重要的工具。就像Excel让处理表格数据变得简单一样,DataFrame也有类似的功能,但更加强大,特别是在处理大量数据时。了解DataFrame不仅能帮你更高效地处理数据,还能让你更容易进行数据清洗、可视…...
【word】从正文开始设置页码
在写报告的时候,会要求有封面和目录,各占一页。正文从第3页开始,页码从正文开始设置 word是新建的 分出三节(封面、目录、正文) 布局--->分割符--->分节符--->下一页 这样就能将word分为3节,分…...
计算机网络 快速了解网络层次、常用协议、常见物理设备。 掌握程序员必备网络基础知识!!!
文章目录 0 引言1 基础知识的定义1.1 计算机网络层次1.2 网络供应商1.3 猫、路由器、交换机1.4 IP协议1.5 TCP、UDP协议1.6 HTTP、HTTPS、FTP协议1.7 Web、Web浏览器、Web服务器 2 总结 0 引言 在学习的过程中总是会对IP、TCP、UDP、HTTP、HTTPS、FTP这些常见的协议不熟悉&…...
CUDA 安装
查看自己电脑的cuda版本:见文章 查看CUDA版本 我的是: 他的意思就是说:俺的显卡支持的cuda版本是12.0的(向下兼容) 然后我的项目tensorflow-gpu版本是1.13.2版本的,对应的cuda为10: ÿ…...
Springboot+vue的在线试题题库管理系统(有报告),Javaee项目,springboot vue前后端分离项目。
演示视频: Springbootvue的在线试题题库管理系统(有报告),Javaee项目,springboot vue前后端分离项目。 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的在线试题题库管理系统,采用M&…...
【简单的留言墙】HTML+CSS+JavaScript
目标:做一个简单的留言墙 1.首先我们用HTML的一些标签,初步构造区域 样式。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>留言墙</title><style>/* ...... */ …...
linux 火狐浏览器报错Firefox is already running, but is not responding
Ubuntu环境下打开Firefox报错: Firefox is already running, but is not responding.-CSDN博客 killall firefox...
Python:操作SQLite数据库简单示例
本文用最简单的示例演示python标准库提供的SQLite数据库进行新增、查询数据的过程。 代码文件app.py # -*- coding: UTF-8 -*- from flask import Flask import sqlite3app Flask(__name__)app.route(/) def hello_world():return Hello World!#创建数据库 app.route(/creat…...
第8期ThreadX视频教程:应用实战,将裸机工程移植到RTOS的任务划分,驱动和应用层交互,中断DMA,C库和中间件处理等注意事项
视频教程汇总帖:【学以致用,授人以渔】2023视频教程汇总,DSP第12期,ThreadX第8期,BSP驱动第26期,USB实战第5期,GUI实战第3期(2023-10-01) - STM32F429 - 硬汉嵌入式论坛 …...
【NeurIPS 2023】Backdoor对抗攻防论文汇总
NeurIPS 对抗攻防论文 NeurIPS2022|对抗攻防论文整理 - 知乎 NeurIPS 2023 Papers BIRD: Generalizable Backdoor Detection and Removal for Deep Reinforcement Learning https://neurips.cc/virtual/2023/poster/70618 摘要: 后门攻击对深度强化学习&…...
(Note)在Excel中选中某一行至最后一行的快捷键操作
在 Excel 中,选中一行至最后一行的快捷键是 “Shift 空格 Ctrl 方向键下”。按住 Shift 键,然后按下空格键以选中整行,接着按下 Ctrl 键保持选中状态,并按下方向键下键盘按钮以扩展选中范围至最后一行。 简要步骤如下…...
古记事法:Windows 下 16 位汇编环境搭建指南(DOSBox-X 篇)
文章目录 参考环境DOSBox-XWOWWindows On Windows 产生的原因Windows On Windows 的工作原理WOW16 的结束与 WOW64 的未来 在现代操作系统中运行 16 位应用程序DOSBox-X 16 位汇编环境的搭建应用准备挂载自动挂载dosbox-x.conf配置工具 参考 项目描述搜索引擎Bing、GoogleAI 大…...
云计算基础:理解AWS、Azure和Google Cloud
云计算基础:理解AWS、Azure和Google Cloud 介绍 云计算已经成为现代科技领域的重要驱动力之一。它为企业提供了灵活性、可伸缩性和成本效益,以满足日益增长的计算和存储需求。本文将深入探讨三个主要的云计算提供商:Amazon Web Services (A…...
【数据结构初阶】七、非线性表里的二叉树(堆的实现 -- C语言顺序结构)
相关代码gitee自取: C语言学习日记: 加油努力 (gitee.com) 接上期: 【数据结构初阶】六、线性表中的队列(链式结构实现队列)-CSDN博客 1 . 非线性表里的 树(Tree) 树的概念及结构: 树的概念 树是一种非线性的数据…...
基于SpringBoot的网上超市系统
基于SpringBoot的网上超市系统的设计与实现 开发语言:Java数据库:MySQL技术:SpringBootMyBatis工具:IDEA/Ecilpse、Navicat、Maven 【主要功能】 角色:用户、管理员 管理员:个人中心、用户管理、商品分类…...
在springboot项目中整合Druid
或 1.导入maven坐标 <dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.19</version> </dependency>2.在application.properties中配置连接池 spring:datasource:d…...
微信支付费率降低到0.2%,商家收款开户手续费0.6%降低的操作方法
在如今的数字时代,移动支付已成为人们日常生活中必不可少的一部分。微信支付作为国内最受欢迎的移动支付平台,一直致力于为商家和个人提供最便捷、安全的支付方式。如果可以将微信支付将费率降低到仅为0.2%,这无疑给广大商家带来了巨大的利好…...
计算机毕业设计 基于SSM的民宿推荐系统的设计与实现 Java实战项目 附源码+文档+视频讲解
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...
【机器学习】训练集/验证集/测试集释疑
文章目录 序言1. 训练集、验证集、测试集是什么2. 为什么需要验证集3. 验证集是必须的吗4. 验证集和测试集上的表现会不同吗5. 如何从Train/Test Set划分Validation Set6. 训练集、验证集和测试集的比例怎么设置7. 模型表现不好时测试集可以反复使用来调整模型吗8. 训练集、验证…...
LCR 120.寻找文件副本
题目来源: leetcode题目,网址:LCR 120. 寻找文件副本 - 力扣(LeetCode) 解题思路: 使用哈希集合判断是否有元素重复出现即可。 解题代码: class Solution {public int findRepeatDocument(…...
代码随想录算法训练营第44天|动态规划:完全背包理论基础、518.零钱兑换II、377. 组合总和 Ⅳ
动态规划:完全背包理论基础 518.零钱兑换II https://leetcode.cn/problems/coin-change-ii/ 用一个二维dp数组 class Solution { public:int change(int amount, vector<int>& coins) {vector<vector<int>> dp(coins.size(), vector<i…...
309.买卖股票的最佳时机含冷冻期【Java】
309. 买卖股票的最佳时机含冷冻期 - 力扣(LeetCode) 给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次…...
React Promise 中断
需求: 上传文件,但是后端接口不支持多文件上传,但是一次性发出很多请求的话如果有100个文件那对后端的压力又太大了在上传的时候还需要有停止上传的按钮 进程: async await 只能做到第一步,但是无法在上传中的时候关…...
1.填空题 进制转换Oct.2023
原题 部分可能会有用处的知识: p p p进制转十进制: 假设有一个 p p p进制数,个位是 a 0 a_0 a0,向高位依次是 a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1,a2,...,an,向低位依次是 b 1 , b 2 , b 3 , . . . …...
做网站的实训报告/链接购买
早晨7点到实验室一翻邮箱看到tc的邮件。。。srm 546,因为昨晚去复习,没来实验室,所以不知到又比赛。T_T 早晨抽出一小时翻了翻。。。 250pt 水题 550pt 不好想,反正我的思路很复杂,写难产了。然后看到别人的写…...
南昌装修网站建设/游戏如何在网上推广
问题描述 给定一个N阶矩阵A,输出A的M次幂(M是非负整数) 例如: A 1 2 3 4 A的2次幂 7 10 15 22 输入格式 第一行是一个正整数N、M(1<N<30, 0<M<5),表…...
网站检测器/杭州谷歌推广
1.4 测试CMS一键发布接口1.4.1 配置虚拟主机 在nginx配置课程详情页面的虚拟主机,实现访问:www.xuecheng.com/course/detail/.....html。 #静态资源服务 upstream static_server_pool{ server 127.0.0.1:91 weight 10; } server { listen 80; server_n…...
自己家的电脑做网站需要备案没/厦门网络营销推广
详细问题描述(DCloud产品不会有明显的bug,所以你遇到的问题大都是在特定环境下才能重现的问题,请仔细描述你的环境和重现方式,否则DCloud很难排查解决你的问题)[内容]项目需求需要从安卓设备上传图片到服务器或者OSS。这里采取的是用plus.io …...
搜索引擎中 哪些网站可以获得更好的排名/制作网站的软件叫什么
项目截图群聊:私聊:项目技术栈可以看到项目中用到的都是技术都是很常用技术,同时也是我们需要掌握的能力。而且 crossoverJie 大佬的代码写的也相当漂亮,非常值得学习一波。先来简单看一下系统整体架构!系统架构下面我…...
自己做的网站放到首页/seo营销培训咨询
首先我们得知道什么叫shell.操作系统与外部最主要的接口就叫做shell,或许这样说过于术语化,例如cmd命令行,这是windows操作系统下的一个shell。这里说的dreamhost的shell是指dreamhost提供给客户一个命令行,方便客户更好的使用他们的虚拟主机…...