C++學習之密碼學知識

目錄

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)上保密通訊的工業標準。?

22.openssl介紹

23.vs下opensl的配置

24.openssl在Linux的安裝

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/77586.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/77586.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/77586.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

安裝vllm

ubuntu 22.04, RTX3080, cuda 12.1, cudnn 8.9.7&#xff0c;cuda和cudnn的安裝參考&#xff1a;https://blog.csdn.net/m0_52111823/article/details/147154526?spm1001.2014.3001.5501。 查看版本對應關系&#xff0c;下載12.1對應的whl包&#xff0c;https://github.com/vl…

【WPF】自定義控件:ShellEditControl-同列單元格編輯支持文本框、下拉框和彈窗

需要實現表格同一列&#xff0c;單元格可以使用文本框直接輸入編輯、下拉框選擇和彈窗&#xff0c;文本框只能輸入數字&#xff0c;彈窗中的數據是若干位的二進制值。 本文提供了兩種實現單元格編輯狀態下&#xff0c;不同編輯控件的方法&#xff1a; 1、DataTrigger控制控件的…

Gson、Fastjson 和 Jackson 對比解析

目錄 1. Gson (Google) 基本介紹&#xff1a; 核心功能&#xff1a; 特點&#xff1a; 使用場景&#xff1a; 2. Fastjson (Alibaba) 基本介紹&#xff1a; 核心功能&#xff1a; 特點&#xff1a; 使用場景&#xff1a; 3. Jackson 基本介紹&#xff1a; 核心功能…

淺談微信視頻號推薦算法

這次可能會稍微有點干貨&#xff0c;但保證不晦澀~ 一、算法推薦的本質&#xff1a;猜你喜歡 vs 社交綁架? 視頻號的推薦系統本質上在做兩件事&#xff1a; ?預測你的興趣?&#xff1a;通過你的瀏覽、點贊、評論、分享等行為&#xff0c;分析你的偏好。?滿足社交需求?&…

halcon模板匹配(一)create_shape_model_xld

目錄 一、提取剎車盤孔洞輪廓二、形狀模板的創建-設置-訓練-查找三、找到亮的圓孔四、獲得匹配結果五、使用use_polarity進行模板匹配六、計算四個圓對應的矩形框七、創建四個圓對應的模板并查找一、提取剎車盤孔洞輪廓 小技巧總結,使用boundary 函數提取區域邊界,在邊界范圍…

day26圖像處理OpenCV

文章目錄 一、OpenCV1.介紹2.下載3.圖像的表示4.圖像的基本操作4.1圖片讀取或創建4.1.1讀取4.1.2創建 4.2創建窗口4.3顯示圖片4.3.1設置讀取的圖片4.3.2設置顯示多久4.3.3釋放 4.4.保存圖片4.5圖片切片&#xff08;剪裁&#xff09;4.6圖片大小調節 5.在圖像中繪值5.1繪制直線5…

零基礎開始學習鴻蒙開發-智能家居APP離線版介紹

目錄 1.我的小屋 2.查找設備 3.個人主頁 前言 好久不發博文了&#xff0c;最近都忙于面試&#xff0c;忙于找工作&#xff0c;這段時間終于找到工作了。我對鴻蒙開發的激情依然沒有減退&#xff0c;前幾天做了一個鴻蒙的APP&#xff0c;現在給大家分享一下&#xff01; 具體…

C++的*了又*

先看下面一段代碼 class HeapWord {friend class VMStructs;private:char *i; };主函數 #include "HeapWord.hpp" int main() {HeapWord *heapword new HeapWord();HeapWord *p new HeapWord();HeapWord **p1 new HeapWord *();heapword 3;*(HeapWord **)p he…

yolov8在windows系統的C++版本的onnxruntime部署方法

1.各個軟件的的環境需要保持在統一的版本。 onnxruntime需要和cuda的版本對應上,版本號:onnxruntime-win-x64-gpu-1.18.1 ,鏈接: NVIDIA - CUDA | onnxruntime cuda:本機顯卡支持的版本,cuda11.7,鏈接:CUDA Toolkit Archive | NVIDIA Developer cudnn:需要對應到cud…

js chrome 插件,下載微博視頻

修改說明&#xff1a; 代碼資源&#xff0c;免積分下載 起因&#xff0c; 目的: 最初是想下載微博上的NBA視頻&#xff0c;因為在看網頁上看視頻很不方便&#xff0c;快進一次是10秒&#xff0c;而本地 VLC 播放器&#xff0c;快進一次是5秒。另外我還想做點視頻剪輯。 對比…

【vue3】@click函數傳動態變量參數

根據java的學習&#xff0c;摸索了一下vue3 函數傳參的方式。以此作為記錄。有更好的其它方式&#xff0c;可以評論區補充。 <script> const tmpref(); </script><button click"tmpFunction(傳遞參數:tmp)">按鈕</button> // 直接【字符串…

jmeter 集成ZAP進行接口測試中的安全掃描 實現方案

以下是將 JMeter 集成 ZAP(OWASP Zed Attack Proxy)進行接口測試中安全掃描的實現方案: 1. 環境準備 JMeter 安裝:從 JMeter 官方網站(https://jmeter.apache.org/download_jmeter.cgi)下載并安裝 JMeter,確保其版本穩定。ZAP 安裝:從 ZAP 官方網站(https://www.zapr…

全能格式轉換器v16.3.0.159綠色便攜版

前言 全能格式轉換器具有音視頻格式轉換、合并視頻、壓縮視頻、錄制視頻、下載視頻、DVD刻錄等功能。以超快的轉換速度及強大的功能在國外名聲大噪&#xff0c;轉換速度是市面同類產品的30倍&#xff0c;操作簡便&#xff0c;支持158種視頻格式無損轉換&#xff0c;批量轉換高…

【基于開源insightface的人臉檢測,人臉識別初步測試】

簡介 InsightFace是一個基于深度學習的開源人臉識別項目,由螞蟻金服的深度學習團隊開發。該項目提供了人臉檢測、人臉特征提取、人臉識別等功能,支持多種操作系統和深度學習框架。本文將詳細介紹如何在Ubuntu系統上安裝和實戰InsightFace項目。 目前github有非常多的人臉識…

設計一個簡單的權限管理系統

針對大規模服務器集群的權限管理系統設計&#xff0c;需結合 角色分層、最小權限原則 和 動態權限控制 來實現安全高效的權限管理。以下是分階段設計方案&#xff1a; 一、核心設計思路 基于角色的訪問控制&#xff08;RBAC&#xff09; 定義角色層級&#xff08;如董事長 >…

使用 nano 文本編輯器修改 ~/.bashrc 文件與一些快捷鍵

目錄 使用 nano 編輯器保存并關閉文件使用 sed 命令直接修改文件驗證更改 如果你正在使用 nano 文本編輯器來修改 ~/.bashrc 文件&#xff0c;以下是保存并關閉文件的具體步驟&#xff1a; 使用 nano 編輯器保存并關閉文件 打開 ~/.bashrc 文件 在終端中運行以下命令&#xf…

spm12_fMRI 2*4混合方差分析 Flexible factorial 對比矩陣

實驗設計&#xff1a;2*4被試內設計 分析模型&#xff1a;spm 二階分析中的 Flexible factorial 問題&#xff1a;Flexible factorial交互作用對比矩陣如何編寫&#xff1f; 老師&#xff1a;deepseek老師【大神們看看這個矩陣是否可以如下編寫&#xff1f;】 以下是來自de…

用Python修改字體字形與提取矢量數據:fontTools實戰指南

字體設計與分析是NLP和視覺領域的交叉應用&#xff0c;而**fontTools** 是一款強大的Python庫&#xff0c;可以讓我們直接操作字體文件的底層結構。本文將通過兩個實用函數&#xff0c;展示如何修改特定字形和提取所有字形的矢量數據&#xff0c;幫助開發者快速上手字體編輯與分…

Windows 11 PowerShell重定向文本文件的編碼問題

目錄 問題的由來 編碼導致的問題 解決辦法 VSCode進行轉換 記事本進行轉換 直接指定輸出的文本編碼 總結 問題的由來 在我的嵌入式系統的課程中有一個裸機開發的實驗&#xff0c;其中需要把圖片等文件轉換為C語言數組保存在程序中。課程中&#xff0c;我推薦了CodePlea的…

SQL開發的智能助手:通義靈碼在IntelliJ IDEA中的應用

SQL 是一種至關重要的數據庫操作語言&#xff0c;盡管其語法與通用編程語言有所不同&#xff0c;但因其在眾多應用中的廣泛使用&#xff0c;大多數程序員都具備一定的 SQL 編寫能力。然而&#xff0c;當面對復雜的 SQL 語句或優化需求時&#xff0c;往往需要專業數據庫開發工程…