數據一致性校驗算法

  1. 數據完整性校驗

在 數據錄入、通信協議(CAN、LIN、Ethernet) 和 存儲(Flash、EEPROM) 領域,數據校驗(Error Checking) 是確保 數據完整性和正確性的關鍵技術

示例:當我們從互聯網上下載的軟件或者文件是否能打開,是否在傳輸過程中丟包決定了是否能使用和查看,很多資源站下載文件時會提供一個md5校驗碼,驗證文件是否完整可以通過md5 文件獲取到校驗碼,與下載站提供的校驗碼一致就能確定文件是完整的。

以下部分將提供幾種常用的完整性校驗的技術:

· 奇偶校驗(Parity Check) - 用于簡單錯誤檢測

奇偶校驗是一種簡單的錯誤檢測機制,它通過計算數據中 1 的個數來檢查數據是否發 生錯誤。

適用于低速數據傳輸(如 LIN 總線、UART 通信)

常用于加密技術,如:des加密技術

奇偶校驗的基本原理:

奇偶校驗通過統計數據中1的個數,然后添加一位校驗碼,使得數據中1的總數為奇數(奇校驗)或偶數(偶校驗)。當接收方接 收到數據后,再次計算1的個數,并根據校驗位的設置驗證數據的完整性。如果檢測到錯誤,接收方會要求重新發送數據

代碼實現:

計算奇偶校驗

uint8_t Compute_Parity(uint8_t data)

{

????uint8_t parity = 0;

????while (data)

????{

????????parity ^= (data & 1); ?// 計算 1 的個數

????????data >>= 1;

????}

????return parity;

}

發送數據:

uint8_t data = 0x53; // 01010011

uint8_t parity = Compute_Parity(data);

uint8_t frame = (data << 1) | parity; ?// 生成帶校驗位的數據

接收數據:

uint8_t received_data = frame >> 1;

uint8_t received_parity = frame & 1;

if (Compute_Parity(received_data) != received_parity)

{

????printf("數據錯誤!\n");

}

以DES技術實現原理為例:

DES特點

對稱算法:加密和解密使用同一秘鑰

分組加密算法:以64位為分組。64位明文輸入,64位密文輸出。

有效秘鑰長度為56位秘鑰通常表示為64位數,但每個第8位用作奇偶校驗,可以忽略。

代替和置換DES算法是兩種加密技術的組合:混亂和擴散。先替代后置換。

易于實現:DES算法只是使用了標準的算術和邏輯運算,其作用的數最多也只有64 位,因此用70年代末期的硬件技術很容易實現算法的重復特性使得它可以非常理想地用在一個專用芯片中。

可通過多重加密,提高安全等級

入口參數

Key為7個字節共56位,是DES算法的工作密鑰

Data為8個字節64位,是要被加密或被解密的數據

Mode為DES的工作方式,有兩種:加密或解密

基本原則

DES設計中使用了分組密碼設計的兩個原則:混淆(confusion)和擴散(diffusion),其目的是抗擊敵手對密碼系統的統計分析。

混淆是使密文的統計特性與密鑰的取值之間的關系盡可能復雜化,以使密鑰和明文以及密文之間的依賴性對密碼分析者來說是無法利用的。

擴散的作用就是將每一位明文的影響盡可能迅速地作用到較多的輸出密文位中,以便在大量的密文中消除明文的統計結構,并且使每一位密鑰的影響盡可能迅速地擴展到較多的密文位中,以防對密鑰進行逐段破譯。

算法描述

輸入64位明文數據,并進行初始置換IP

在初始置換IP后,明文數據再被分為L0和R0左右兩部分,每部分32位

在秘鑰的控制下,經過16輪運算(f)

16輪后,左、右兩部分交換,并連接再一起,再進行逆置換

輸出64位密文

DES算法過程

子密鑰生成流程

DES算法由64位密鑰產生16輪的48位子密鑰。主要過程如下:

把密鑰的奇偶校驗位忽略不參與計算,即每個字節的第8位,將64位密鑰降至56位,然后根據選擇置換表PC-1將這56位分成兩塊C0(28位)和D0(28位)

將C0和D0進行循環左移變化(注:每輪循環左移的位數由輪數決定),變換后生成C1和D1,然后C1和D1合并,并通過選擇置換表PC-2生成子密鑰K1(48位)

C1和D1再次經過循環左移變換,生成C2和D2,然后C2和D2合并,通過選擇置換PC-2生成密鑰K2(48位)

以此類推,得到K16(48位)

?

· CRC 校驗(Cyclic Redundancy Check) - 用于強校驗

CRC(Cyclic Redundancy Check,循環冗余校驗)是一種強大的錯誤檢測機制,用于檢測 數據傳輸 / 存儲中的錯誤。

廣泛應用于 CAN 總線、LIN、FlexRay、Ethernet、Flash 存儲。

?CRC 校驗步驟

發送端計算 CRC 值,并將其附加到數據幀。

接收端重新計算 CRC,如果計算出的 CRC 與收到的 CRC 不一致,則數據錯誤

Crc-8計算:

uint8_t CRC8_Table[256] = { /* 預計算的 CRC-8 查找表 */ };

uint8_t Compute_CRC8(uint8_t* data, uint8_t len)

{

????uint8_t crc = 0xFF;

????for (int i = 0; i < len; i++)

????{

????????crc = CRC8_Table[crc ^ data[i]];

????}

????return crc;

}

發送crc:

uint8_t message[] = {0x12, 0x34, 0x56};

uint8_t crc = Compute_CRC8(message, sizeof(message));

message[3] = crc; ?// 附加 CRC

接收crc:

uint8_t received_crc = message[3];

if (Compute_CRC8(message, 3) != received_crc)

{

????printf("數據錯誤!\n");

}

· Checksum(校驗和) - 用于簡單完整性校驗

Checksum(校驗和) 是一種簡單的錯誤檢測方法,它將 所有數據的二進制數值相加,并將 結果的低字節作為校驗和。

三種完整性校驗對比:

校驗方法

適用場景

優點

缺點

奇偶校驗

UART、LIN

計算簡單

只能檢測?1-bit?錯誤

Checksum

EEPROM、Flash

計算快,適合小數據

不能檢測位翻轉

CRC

CAN、Ethernet、UDS

高精度錯誤檢測

計算復雜

根據業務具體場景選擇使用哪種校驗算法

  1. 數據可靠性傳輸

Tcp可靠性傳輸協議

通道的建立——三次握手:

(1)在建立通道時,客戶端首先要向服務端發送一個SYN同步信號。

(2)服務端在接收到這個信號之后會向客戶端發出SYN同步信號和ACK確認信號。

(3)當服務端的ACK和SYN到達客戶端后,客戶端與服務端之間的這個“通道”就會被建立起來。

通道的關閉——四次揮手:

(1)在數據傳輸完畢之后,客戶端會向服務端發出一個FIN終止信號。

(2)服務端在收到這個信號之后會向客戶端發出一個ACK確認信號。

(3)如果服務端此后也沒有數據發給客戶端時服務端會向客戶端發送一個FIN終止信號。

(4)客戶端在收到這個信號之后會回復一個確認信號,在服務端接收到這個信號之后,服務端與客戶端的通道也就關閉了。

Tcp保證可靠性策略

·?確認應答機制(核心)

確認應答機制就是由Tcp報頭字段中的32位序號和32位確認序號來保證的

注意:確認應答機制不是保證雙方的通信的可靠性,而是通過收到對方應答,來保證一方通信的可靠性,但是如果雙方都這樣搞,就是間接保證了雙方通信的可靠性

?確認應答機制前面已經大量涉及了,這里不再贅述了,只要記住,確認應答機制是Tcp保證可靠性的核心,或者說是基礎,其余絕大部分的保證可靠性機制都是建立在確認應答機制基礎上的

· 超時重傳機制

定義:雙方在進行網絡通信時,發送方發出數據,如果在一個特定時間間隔內收不到應答,那么發送方就認為“我發的數據對方沒有收到”,就會進行數據重發

附:Tcp保證可靠性一部分是通過Tcp協議報頭體現出來的,還有一部分是通過實現Tcp的代碼邏輯實現出來的,比如超時重傳機制就是在發送方發出數據后開啟了一個定時器,這就是通過Tcp的代碼邏輯體現出來的,這在Tcp報頭中是體現不出來的

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

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

相關文章

101個α因子#9

((0 < ts_min(delta(close, 1), 5)) ? delta(close, 1) : ((ts_max(delta(close, 1), 5) < 0) ? delta(close, 1) : (-1 * delta(close, 1))))worldquant brain平臺上調整后的語法&#xff1a; ((0 < min(close-ts_delay(close, 1), ts_delay(close, 1)-ts_delay(c…

國產視頻轉換LT6211UX:HDMI2.0轉LVDS/MIPI芯片簡介,支持4K60Hz

1. LT6211UX HDMI2.0信號輸入 支持HDMI2.0b, HDMI1.4和DVI1.0 支持HDCP2.2和HDCP1.4 數據速率高達6Gbps 自適應接收機均衡 支持4k60Hz 支持的3D格式&#xff1a; 對于HDMI -> LVDS&#xff1a; 直接3D輸出 2路2D L/R輸出 對于HDMI -> MIPI&#xff1a; 框架包裝&#x…

華三(H3C)IRF堆疊心跳的LACP MAD、BFD MAD和ARP MAD差異

華三&#xff08;H3C&#xff09;IRF堆疊心跳的三種MAD&#xff08;多主檢測&#xff09;機制——LACP MAD、BFD MAD和ARP MAD在實現原理、組網要求及適用場景上存在顯著差異。以下是三者的對比分析&#xff1a; 一、核心區別對比 特性LACP MADBFD MADARP MAD檢測原理擴展LAC…

宿州金博學校開展防震演練:夯實安全根基,守護校園平安

5月13日上午9點30分&#xff0c;金博學校原本寧靜的校園被一陣急促的警報聲打破&#xff0c;一場精心籌備、緊張有序的防震演練正式開啟。本次演練意義重大&#xff0c;旨在強化全體師生的防震減災意識&#xff0c;提高大家在地震突發時的應急反應與自我保護能力。 緊急避險&am…

DAY29 超大力王愛學Python

知識點回顧 類的裝飾器裝飾器思想的進一步理解&#xff1a;外部修改、動態類方法的定義&#xff1a;內部定義和外部定義 作業&#xff1a;復習類和函數的知識點&#xff0c;寫下自己過去29天的學習心得&#xff0c;如對函數和類的理解&#xff0c;對python這門工具的理解等&…

RabbitMQ ④-持久化 || 死信隊列 || 延遲隊列 || 事務

消息確認機制 簡單介紹 RabbitMQ Broker 發送消息給消費者后&#xff0c;消費者處理該消息時可能會發生異常&#xff0c;導致消費失敗。 如果 Broker 在發送消息后就直接刪了&#xff0c;就會導致消息的丟失。 為了保證消息可靠到達消費者并且成功處理了該消息&#xff0c;…

python打卡訓練營打卡記錄day31

知識點回顧 規范的文件命名規范的文件夾管理機器學習項目的拆分編碼格式和類型注解 作業&#xff1a;嘗試針對之前的心臟病項目ipynb&#xff0c;將他按照今天的示例項目整理成規范的形式&#xff0c;思考下哪些部分可以未來復用。 心臟病項目目錄 目錄結構:heart/ ├── conf…

mac .zshrc:1: command not found: 0 解決方案

nano ~/.zshrc 使用自帶的nano命令打開文件&#xff0c;修改后 Ctrl X 然后輸入y 然后回車即可保存成功 一般情況下&#xff0c;不是常用這個命令&#xff0c;除非是遇到有問題的文件&#xff0c;才用&#xff0c; 例如 遇到下面的問題 /Users/xxli/.zshrc:1: command no…

uniapp生成的app,關于跟其他設備通信的支持和限制

以下內容通過AI生成&#xff0c;這里做一下記錄。 藍牙 移動應用&#xff08;App&#xff09;通過藍牙與其他設備通信&#xff0c;是通過分層協作實現的。 一、通信架構分層 應用層&#xff08;App&#xff09; 調用操作系統提供的藍牙API&#xff08;如Android的BluetoothA…

第50天-使用Python+Qt+DeepSeek開發AI運勢測算

1. 環境準備 bash 復制 下載 pip install pyside6 requests python-dotenv 2. 獲取DeepSeek API密鑰 訪問DeepSeek官網注冊賬號 進入控制臺創建API密鑰 在項目根目錄創建.env文件: env 復制 下載 DEEPSEEK_API_KEY=your_api_key_here 3. 創建主應用框架 python 復制…

上位機與Hid設備通信

前置知識 什么是HID&#xff1f; HID&#xff08;Human Interface Device&#xff09;是?直接與人交互的電子設備?&#xff0c;通過標準化協議實現用戶與計算機或其他設備的通信&#xff0c;典型代表包括鍵盤、鼠標、游戲手柄等。? 為什么HID要與qt進行通信&#xff1f; …

JVM 工具實戰指南(jmap / jstack / Arthas / MAT)

&#x1f50d; 從診斷到定位&#xff1a;掌握生產級 JVM 排查工具鏈 &#x1f4d6; 前言&#xff1a;系統故障時&#xff0c;如何快速定位&#xff1f; 無論 JVM 理論多么扎實&#xff0c;當線上服務出現 CPU 飆高、響應超時、內存泄漏或頻繁 Full GC 時&#xff0c;僅靠猜測…

mac上安裝 Rust 開發環境

1.你可以按照提示在終端中執行以下命令&#xff08;安全、官方支持&#xff09;&#xff1a; curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh然后按提示繼續安裝即可。 注意&#xff1a;安裝過程中建議選擇默認配置&#xff08;按 1 即可&#xff09;。 如果遇…

C++(5)switch語句 循環while

這是一個電影評分的程序 default 就是 如果上述的都沒有執行 就統一的執行default的內容。 然后記得break ___________________________________ 循環 &#xff08;while&#xff09; while的使用方式 輸出 0-9的while循環

[Linux] Linux線程信號的原理與應用

Linux線程信號的原理與應用 文章目錄 Linux線程信號的原理與應用**關鍵詞****第一章 理論綜述****第二章 研究方法**1. **實驗設計**1.1 構建多線程測試環境1.2 信號掩碼策略對比實驗 2. **數據來源**2.1 內核源碼分析2.2 用戶態API調用日志與性能監控 **第三章 Linux信號的用法…

25.5.20學習總結

做題思路 數列分段 Section IIhttps://www.luogu.com.cn/problem/P1182正如題目所說&#xff0c;我們需要得到一個最小的最大段的值&#xff0c;可能有人將注意力放在分段上&#xff0c;事實上&#xff0c;我們更多的應該關注結果。這是一道二分答案的題&#xff0c;你可以先確…

Python爬蟲-爬取百度指數之人群興趣分布數據,進行數據分析

前言 本文是該專欄的第56篇,后面會持續分享python爬蟲干貨知識,記得關注。 在本專欄之前的文章《Python爬蟲-爬取百度指數之需求圖譜近一年數據》中,筆者有詳細介紹過爬取需求圖譜的數據教程。 而本文,筆者將再以百度指數為例子,基于Python爬蟲獲取指定關鍵詞的人群“興…

【工具使用】STM32CubeMX-USB配置-實現U盤功能

一、概述 無論是新手還是大佬&#xff0c;基于STM32單片機的開發&#xff0c;使用STM32CubeMX都是可以極大提升開發效率的&#xff0c;并且其界面化的開發&#xff0c;也大大降低了新手對STM32單片機的開發門檻。 ????本文主要講述STM32芯片USB功能的配置及其相關知識。 二…

從ISO17025合規到信創適配 解密質檢lims系統實驗室的 AI 質檢全鏈路實踐

在北京某國家級質檢中心的 CMA 復評審現場&#xff0c;審核專家通過系統后臺調取近半年的檢測記錄&#xff0c;從樣品登記時的電子簽名到報告簽發的 CA 簽章&#xff0c;178 項合規指標全部自動校驗通過 —— 這是白碼質檢 LIMS 系統創造的合規奇跡。 一、智能合規引擎&#xf…

【操作系統】進程同步問題——生產者-消費者問題

問題描述 生產者進程負責生產產品&#xff0c;并將產品存入緩沖池&#xff0c;消費者進程則從緩沖池中取出產品進行消費。為實現生產者和消費者的并發執行&#xff0c;系統在兩者之間設置了一個包含n個緩沖區的緩沖池。生產者將產品放入緩沖區&#xff0c;消費者則從緩沖區中取…