一、http和https、SSL
HTTP(Hypertext Transfer Protocol)是一种基于客户端-服务端架构的应用层协议,主要用于 Web 应用之间的数据交互。它是一种无状态协议,指每个请求都是相互独立的,服务器不会记录任何会话信息。
HTTPS是一种通过计算机网络进行安全通信的传输协议 · 经由HTTP进行通信 · 利用SSL/TLS建立全信道 · 加密数据包 · HTTPS使用的主要目的是提供对网站服务器的身份认证 · 同时保护交换数据的隐私与完整性。
https特点:
- 内容加密:采用混合加密技术 · 中间者无法直接查看明文内容
- 验证身份:通过证书认证客户端访问的是自己的服务器
- 保护数据完整性:防止传输的內容被中间人冒充或者篡改
HTTPS加密过程
对称加密:
在握手阶段,客户端和服务器使用对称加密算法生成会话密钥,例如AES或DES。
会话密钥是一种只有客户端和服务器知道的密钥,用于加密和解密通信中的数据。
非对称加密:
在握手阶段,服务器将自己的公钥包含在数字证书中发送给客户端。
客户端使用服务器的公钥加密生成的会话密钥,并发送给服务器。
服务器使用自己的私钥解密客户端发送的会话密钥。
数字证书:
服务器的数字证书包含了服务器的公钥以及相关的身份信息,由受信任的证书颁发机构(CA)签发。
客户端在接收到服务器的数字证书后,会使用预置的根证书来验证服务器的数字证书的合法性和真实性。
如果验证成功,客户端就可以信任服务器的公钥,并使用它来加密通信中的数据。
通过以上步骤,HTTPS实现了通信过程中的数据加密和安全验证。对称加密算法用于加密和解密实际的通信数据,非对称加密算法用于安全地交换对称加密所需的会话密钥,数字证书用于验证服务器的身份。这种混合加密机制保障了HTTPS通信的安全性和隐私保护。
二、数组和链表
存储方式:
- 数组是连续的内存块中存储元素,需要一整块连续的空间。通常创建在栈区。
- 链表以节点的形式动态地存储在内存中,节点可以在内存中分散存储,并通过指针连接在一起。链表通常创建在堆区。
大小:
- 数组的大小在创建时确定,并且之后不易改变。
- 链表的大小可以动态地增长或缩小。
访问元素:
- 数组可以通过下标随机访问任何位置的元素,时间复杂度为O(1)。
- 链表访问节点通常需要从链表的头部开始顺序遍历,时间复杂度为O(n)。
插入和删除操作:
- 数组在插入或删除元素时,可能需要移动其他元素以空出位置或填补空缺,时间复杂度为O(n)。
- 链表可以快速地进行插入和删除操作,只需改变节点指针的指向,无需移动其他节点,时间复杂度为O(1)。
空间复杂度:
- 数组的空间占用是固定的,即使数组中只存储了几个元素,也会保留整个数组的空间。
- 链表的空间使用与其存储的元素数量成正比,可以根据需要动态增长或缩小。
综上所述,数组适用于需要快速访问任意位置的元素,而链表适用于频繁的插入和删除操作,并且对内存空间的动态分配要求较高。根据具体的需求和操作类型,选择合适的数据结构可以提高程序的效率和性能。