目錄
1.文檔介紹
2.知識點概述
3.項目準備
4.序列化介紹
5.項目中基礎組件介紹
6.基礎模塊在項目中作用
7.項目中其他模塊介紹
8.加密三要素
9.對稱加密和非堆成加密
10.對稱和非對稱加密特點
11.堆成加密算法des
12.des對稱加密算法
13.對稱加密算法aes
14.知識點回顧
15.秘鑰分發過程
16.哈希值算法特點
17.常用哈希算法以及散列值長度
18.哈希值不可逆
19.消息認證碼
20.數字簽名和校驗簽名
21.openssl介紹
22.openssl介紹
23.vs下opensl的配置
24.openssl在Linux的安裝
1.文檔介紹
2.知識點概述
-?網絡通信
??-?數據傳輸 -> 需要保證數據的安全性
????-?對數據加密
??-?項目1主要實現的功能:
????-?對網絡通信數據進行加解密的模塊
3.項目準備
基礎組件
???-?數據序列化
???
?????-?google protobuf
???
?????-?解決數據的跨平臺傳輸
???
???????-?字節序
???
???????-?計算機位數
???
?????????-?32位
?????????-?64位
???
???????-?字節對齊
???
?????????```c
?????????struct A
?????????{
?????????????int a;????// 4
?????????????char b;????// 1
?????????????char cc;
?????????????int c;????// 4
?????????};
?????????```
4.序列化介紹
??-?序列化 -> 編碼
???
?????????-?將原始數據按照某種格式進行封裝 -> 特殊的字符串
?????????-?將特殊字符串發送給對方
???
???????-?反序列化 -> 解碼
???
?????????-?接收到序列化的特殊字符串 -> 解析????-> 原始數據
?????????-?安裝業務需求處理原始數據
???
???-?套接字通信
???
?????-?tcp
?????-?線程池 -> 服務器端使用
?????-?連接池 -> 客戶端使用
???????-?多線程的使用
5.項目中基礎組件介紹
?-?共享內存操作 -> shm
???
?????-?進程間通信的一種方式
?????-?效率最高
???????-?之前講的進程間通信的方式都需要使用fd
?????????-?管道
???????????-?匿名 -> 不需要讀磁盤
???????????-?有名 -> 需要磁盤文件
?????????-?本地套接字
?????????-?內存映射區 -> mmap
???????-?不需要對磁盤文件進行操作
???
???-?數據庫操作
???
?????-?使用的oracle
?????-?使用的oracle官方提供的c++接口
???????-?OCI
6.基礎模塊在項目中作用
?秘鑰協商服務器 && 客戶端
???-?客戶端兩種實現模式
?????-?桌面程序 -> Qt
???????-?需要將桌面創建搭建起來
???????-?寫的qt程序
?????????-?業務邏輯純C/C++實現都是可以的
?????-?終端交互 -> linux終端 -> 上課時候使用這個實現
???-?服務器 -> 后臺的守護進程
3.?圖形界面
???-?Qt的配置管理終端
4.?加解密接口(外聯接口)的封裝
7.項目中其他模塊介紹
?2.1 加密三要素
```sequence
note left of 明文: Encode
明文->密文: 加密算法+秘鑰
密文-->明文: 解密算法+秘鑰
note right of 密文: Decode
```
-?加密三要素:
??
??-?明文/密文
??
????-?明文 -> 原始數據
????-?密文 -> 加密之后的數據
??
??-?秘鑰
??
????-?定長的字符串
????-?對稱加密 ->自己生成
????-?非對稱加密 -> 有對應的算法可以直接生成
??
??-?算法
??
????-?加密算法
????-?解密算法
??
8.加密三要素
?舉例:
??
????```c
????明文: 123
????秘鑰: 111
????加密算法: 明文 + 秘鑰????
????解密算法: 密文 - 秘鑰
????
????加密:??123 + 111 = 密文 == 234
????????
????解密: 234 - 11 = 明文 == 123
????```
9.對稱加密和非堆成加密
對稱加密
??
??-?秘鑰比較短
??-?秘鑰只有一個
????-?加密解密使用的秘鑰是相同的
??-?加密的效率高
??-?加密強度相對較低( 相對于非對稱加密 )
??-?秘鑰分發困難 -> 因為秘鑰要保密不能泄露
????-?`秘鑰不能直接在網絡環境中進行發送`
??
-?非對稱加密
??
??-?秘鑰比較長
??-?秘鑰有兩個, 所有的非對稱加密算法都有生成密鑰對的函數
????-?這兩個秘鑰對保存到不同的文件中, 一個文件是公鑰(比較小), 一個是私鑰(比較大)
????-?公鑰???-> 可以公開的
????-?私鑰??-> 不能公開
??-?加解密使用的秘鑰不同
????-?如果使用公鑰加密,?`必須`私鑰解密
????-?如果使用私鑰加密,?`必須`公鑰解密
??-?效率低
??-?加密強度相對較高( 相對于對稱加密 )
??-?秘鑰可以直接分發 -> 分發的公鑰
??
??
10.對稱和非對稱加密特點
## 3.1 對稱加密??
-?<font color="red">**DES/3DES**</font>
-?DES??-> 已經被破解了, 不安全
????-?秘鑰長度 8byte
??-?對數據分段加密, 每組8字節
????-?得到的密文和明文長度是相同的
??-?3DES -> 3重des
????-?安全的, 效率比較低
????-?對數據分段加密, 每組8字節
????-?得到的密文和明文長度是相同的??== 8字節
????-?秘鑰長度24字節, 在算法內部會被平均分成3份, == 每份8字節
??????-?看成是3個秘鑰
??????-?每個8字節
????-?加密處理邏輯:
??????-?加密:?????-> 秘鑰1??* 加密算法
??????-?解密?????-> 秘鑰2???* 解密算法
??????-?加密?????-> 秘鑰3???* 加密算法
????-?三組秘鑰都不同, 加密的等級是最高的
-?<font color="red">**AES**</font>
??-?最安全, 效率最高的公開的對稱加密算法
??-?秘鑰長度: 16字節, 24字節, 32字節
????-?秘鑰越長加密的數據越安全, 效率越低
??-?`分組加密, 每組長度 16 字節`
??-?每組的密文和明文的長度相同??== 16byte
-?Blowfish
-?RC2/RC4/RC5
-?IDEA
-?SKIPJACK
11.堆成加密算法des
### 加密算法
-?**RSA(數字簽名和密鑰交換)**
??-?項目中用的是rsa
-?ECC(橢圓曲線加密算法 - 數字簽名)
-?Diffie-Hellman(DH, 密鑰交換)
-?El Gamal(數字簽名)
-?DSA(數字簽名)
12.des對稱加密算法
```c
// 假設通信的雙方為: 客戶端C, 服務器端S
// Wie什么要交換?
/*
????1. 非對稱加密秘鑰分發方便, 但是效率低 -> 改進: 需要使用對稱加密
????2. 使用對稱加密 -> 秘鑰分發困難 -> 改進: 使用非對稱加密進行秘鑰分發
????????- 分發是對稱加密的秘鑰, 本質就是一個字符串
*/
13.對稱加密算法aes
// 秘鑰交換的過程:
/*
????1. 在服務器端生成一個非對稱加密的密鑰對: 公鑰, 私鑰
????2. 服務器將公鑰發送給客戶端, 客戶端有了公鑰
????3. 在客戶端生成一個隨機字符串 -> 這就是對稱加密需要使用的秘鑰
????4. 在客戶端使用公鑰對生成的對稱加密的秘鑰進行加密 -> 密文
????5. 將加密的密文發送給服務器
????6. 服務器端使用私鑰解密 -> 對稱加密的秘鑰
????7. 雙方使用同一秘鑰進行對稱加密通信
*/
```
14.知識點回顧
> 特點:?
>
> - 不管原始數據有多長, 通過哈希算法進行計算, 得到的結果的長度是固定的
>???- 是一個二進制的字符串
> - 只要是原始數據不一樣, 得到的結果就不一樣
>???- 原始數據差一丟丟, 得到的結果也是完全不同的
> - 有很強的抗碰撞性
>???- 碰撞: 原始數據不同, 但是通過同樣的哈希算法進行計算能得到相同的結果
>???- 推導的結論:
>????- 數據不同得到的結果就不同
>???- 應用場景:
>????- 數據校驗
>?????- 登錄驗證
>????- 秒傳
> - 不可逆
>???- 得到的結果不能推導出原始數據
>?
>哈希運算的結果:
>?
>- 散列值
> - 指紋
> - 摘要
15.秘鑰分發過程
>哈希運算的結果:
>?
>- 散列值
> - 指紋
> - 摘要
-?MD4/MD5
??-?散列值長度: 16字節
??-?抗碰撞性已經被破解
-?SHA-1
??-?散列值長度: 20字節
??-?抗碰撞性已經被破解
-?SHA-2
??-?sha224
????-?散列值長度: 224bit / 8 = 28byte
??-?sha256
????-?散列值長度: 256bit / 8 = 32byte
??-?sha384
????-?散列值長度: 384bit / 8 = 48byte
??-?sha512
????-?散列值長度: 512bit / 8 = 64byte
-?SHA3-224/SHA3-256/SHA3-384/SHA3-512
16.哈希值算法特點
# 5. 消息認證碼 -> HMAC
> 作用:?
>
> - 在通信的時候, 校驗通信的數據有沒有被篡改(完整性)
> - 沒有加密的功能
>
> 使用:
>
> - 消息認證碼的本質是一個散列值
> -?`(原始數據 + 秘鑰) * 哈希函數 = 消息認證碼`
>???- 最關鍵的數據: 秘鑰
>
17.常用哈希算法以及散列值長度
> 校驗的過程:
>
> - 數據發送方A, 數據接收方B
> - 在A或B端生成一個秘鑰: X, 進行分發 -> A和B端都有了 秘鑰: X
> - 在A端進行散列值運算:??(原始數據 + x) * 哈希函數 = 得到散列值
> - 在A端: 將原始數據和散列值同時發送給B
> - 在B端:??-> AB端使用的哈希算法是相同的
>???- 接收數據
>???- 校驗: (接收的原始數據 + x) * 哈希函數 = 散列值New
>???- 比較散列值: 散列值New 和 接收的散列值 是不是相同
>?????- 相同: 沒篡改
>?????- 不同: 被修改了
>
> 缺點:
>
> - 秘鑰分發困難
> - 不能區分消息的所有者
18.哈希值不可逆
> 作用:
>
> - 校驗數據有沒有被篡改(完整性)
> - 鑒別數據的所有者
> - 不能對數據加密
>
> 數字簽名的過程:??-> 私鑰加密數據
>
> - 生成一個非對稱加密的密鑰對, 分發公鑰
> - 使用哈希函數對原始數據進行哈希運算 -> 散列值
> - 使用私鑰對散列值加密 -> 密文
> - 將原始數據和密文一起發送給接收者
19.消息認證碼
> 校驗簽名的過程:
>
> - 接收簽名的一方分發的公鑰
> - 接收簽名者發送的數據:??`接收的原始數據 + 簽名`??
> - 對數據進行判斷:
>???- 對`接收的原始數據`進行哈希運算 -> 散列值new
>?????- 和簽名的時候使用的哈希函數相同(必須相同)
>???- 使用公鑰對簽名(密文) 解密 -> 得到了散列值old
>???- 比較兩個散列值
>?????- 相同: 數據的所有者確實是A, 并且數據沒有被篡改
>?????- 不同:??數據
20.數字簽名和校驗簽名
> OpenSSL 是一個安全[套接字](https://baike.baidu.com/item/%E5%A5%97%E6%8E%A5%E5%AD%97)層密碼庫,囊括主要的[密碼算法](https://baike.baidu.com/item/%E5%AF%86%E7%A0%81%E7%AE%97%E6%B3%95)、常用的[密鑰](https://baike.baidu.com/item/%E5%AF%86%E9%92%A5)和證書封裝管理功能及[SSL](https://baike.baidu.com/item/SSL)協議,并提供豐富的應用程序供測試或其它目的使用。?
21.openssl介紹
>?[SSL](https://baike.baidu.com/item/SSL)是Secure Sockets Layer([安全套接層協議](https://baike.baidu.com/item/%E5%AE%89%E5%85%A8%E5%A5%97%E6%8E%A5%E5%B1%82%E5%8D%8F%E8%AE%AE))的縮寫,可以在Internet上提供秘密性傳輸。[Netscape](https://baike.baidu.com/item/Netscape)公司在推出第一個[Web瀏覽器](https://baike.baidu.com/item/Web%E6%B5%8F%E8%A7%88%E5%99%A8)的同時,提出了SSL協議標準。其目標是保證兩個應用間通信的保密性和可靠性,可在服務器端和用戶端同時實現支持。已經成為[Internet](https://baike.baidu.com/item/Internet)上保密通訊的工業標準。?