HTTPS加密基础算法

164 阅读2分钟

基础

基础算法,http,hash算法

加密算法

对称加密

  • k 对数据加密,同时也可以使用key进行解密

    1. f(k,data)=yf(k ,data) = y // 对数据data加密得到数据y
    2. f(k,y)=dataf(k, y) = data // 对数据y进行解密得到数据data

非对称加密

  • 私钥加密,公钥解密

    1. f(sk,data)=yf(sk, data) = y`
    2. f(pk,y)=dataf(pk, y`) = data
  • 公钥加密,私钥解密

    1. f(pk,data)=yf(pk, data) = y`
    2. f(sk,y)=dataf(sk, y`) = data

HTTP

TCP链接 的几种状态

三次握手

客户端与服务端三次握手从解决网络信道不可靠的问题,同时保证服务端与客户端链接的一致性

sequenceDiagram
  title: 三次握手
  Note over client: init状态
  Note over server: Listen状态
  Note left of client: 发起第一次握手请求
  client ->> server: 发起SYN数据包
  Note over client: syn-send状态
  Note right of server: 第一次握手成功
  server ->> client: 发送 SYN+ACK包 确认建立
  Note over server: syn-rcvd状态
  Note left of client: 第二次握手成功
  client ->> server : ACK数据包
  Note right of server: 第三次握手成功
  Note over client,server: 握手成功进行 established 状态

为什么是三次握手不是两次握手?SYN+ACK 发送完成后就建立链接?

数据传输

创建发送缓存区

发送报文: 序列号+长度+数据内容

回复确认: ACK=序列号+长度 = 下一包的起始序列号

四次挥手

sequenceDiagram
  title: 四次挥手
  note over client,server: 链接确信状态

  client ->> server: FIN指令
  note over client: 第一次挥手

  server ->> client: ACK指令
  note over server: 第二次挥手
  note over client,server: 此时通道进入即将关闭状态,<br/>不再接收新的请求将未处理完的请求处理完成
  server -->> client: 未完成的请求持续发送
  server -->> client: 未完成的请求持续发送
  server ->> client: FIN指令
  note over server: 第三次挥手
  client ->> server: ACK指令
  note over client: 第四次挥手
  note over server: 断开链接
  note over client: 进入等待超时状态
  note over client: 断开链接


Http缓存

缓存状态码:

304: 未修改,自从上次请求之后,请求的网页未修改过,但是请求者应继续使用原有的位置来进行以后的请求。

301: 官方示意永久性移动,表示请求的网页永久移动到了新的位置

强制缓存

Cache-control: max-age: 1000

Cache-control: no-cache

协商缓存

  1. 浏览器发起请求
  2. 服务器返回协商标识
  3. 浏览器记录协商标识
  4. 再次发起请求,协带协商标识
  5. 服务端验证协商标识,
    1. 如果没有发生变化则返回304,
    2. 否则返回200 并返回响应体
1. Modify-cache
  • If-Modified-Since : Tue, 28 Sep 2021 08:18:21 GMT

  • Last-Modified: Tue, 28 Sep 2021 08:18:21 GMT

sequenceDiagram
	title: 协商缓存
  client->>server: 发起资源请求
  
  Note over server: Last-Modified: Tue, 28 Sep 2021 08:18:21 GMT
  server ->> client: 响应资源请求
  Note left of server: responseHeader
  Note over client: 缓存Modified信息  
  Note over client,server: 协带Modified协商标识再次发起请求 

  loop 再次发起请求
  	client -->> server: 发起资源请求
  	 Note over client,server: 判断Last-Modified与If-Modified-Since是否一致?
  	rect rgba(255, 0, 255, 0.1)
  		alt  一致
        server -->> client: 响应304状态码
        Note over client: 从浏览器获取缓存信息
      else 不一致
        server -->> client: 响应200状态码
        Note over server: 服务端返回响应数据
      end
    end
  end
2. Etag-cache
  • If-None-Match: "6152cfcd-13dff"
  • ETag: W/"6152cfcd-13dff"
flowchart LR;
	subgraph client [浏览器]
  	i1-->f1
  	f1-->f2
  end
  subgraph server [服务端]
  	i3-->f3
  end
  client --> server
  
  A[Hard edge] -->|Link text| B(Round edge)
    B --> C{Decision}
    C -->|One| D[Result one]
    C -->|Two| E[Result two]
  

算法及数据结构

抽象数据类型定义的三要素

  • 类型名称
  • 数据对象集
  • 操作集

排序算法

  • 冒泡排序
  • 插入排序
  • 希尔排序
    • 先进行5间隔的排序,3间隔排序,间隔数不应该有相同的最大公约数 1,3,5,7,13
  • 选择排序
    • 堆排序

线性表

什么是队列?

队列:具有一定操作约束的线性表

  • 插入和删除操作:只能在一端插入,而在别一端删除
  • 循环线性表:首尾相链,size = n-1 ,

单向链表队列?

队首:front

队尾:rear

flowchart LR
    A(A,队首) --> B(B)
    B(B) --> C(C)
    C(C) --> D(D,队尾)
    

Hash算法

有限的空间内对数据进行存放,Hash碰撞后的处理方式

什么是栈

栈的特性:选进后出

处理具有相关关系的数据,如javascript 函数执行也是使用栈的结构,进行先进后出处理

什么是推

放在一起且有优先级的数据,使用《完全二叉树》进行描述

从上到下,按照一定顺序排列(从上到下,从大到小)


graph TB;
  10((10))
  9((9))
  8((8))
  7((7))
  6((6))
  5((5))
  4((4))
  
  10 --- 8;
  10 --- 9;
  9 --- 7;
  9 --- 6;
  8 --- 5;
  8 --- 4;
  
 110{{这就是一个堆及它的应用}}