首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

資料校驗技術全解析:從奇偶檢查到 CRC、MD5 與數位簽章

     編輯:關於C++

資料傳輸與儲存過程中,如何確保資料完整性?本文系統梳理七種主流校驗技術,從簡單位元比對到密碼學級別的數位簽章,解析原理、適用場景與實作要點。

1. 什麼是資料校驗?

透過特定演算法對原始資料計算出校驗值,接收端以相同演算法重新計算並比對。若一致,判定資料完整無誤;否則發現錯誤或竄改。

2. 直接比對法

原理:逐位元比對原始資料與接收資料。
優點:絕對準確。
缺點:效率極低,需傳輸雙份資料。
適用:極小資料量通訊(如龍珠 CPU 線上除錯工具 bbug.exe 的單位元組回送確認)。

3. 奇偶校驗

原理:每位元組額外增加 1 位校驗位,透過異或運算使 1 的總個數為奇數或偶數。
應用:單晶片 UART 通訊的 9 位元模式(8 資料位 + 1 校驗位)。

4. BCC 異或校驗

原理:將所有資料位元組與初始值(通常為 0)依序異或,結果作為校驗值附加於資料尾部。
程式碼範例:

unsigned uCRC = 0;
for (int i = 0; i < DataLength; i++) uCRC ^= Data[i];
適用:大多數低階序列通訊(IC 卡介面、單晶片系統)。

5. CRC 循環冗餘校驗

原理:基於多項式除法餘數原理,具備錯誤偵測與有限自動修正能力。
實作:查表法與直接計算法。
常見標準:

  • CRC-12:6-bit 字元傳輸
  • CRC-16 / CRC-CCITT:8-bit 字元
  • CRC-32:硬碟資料、網路傳輸(乙太網、MPEG 解碼晶片、RAR 壓縮)

6. MD5 與數位簽章

MD5:單向雜湊函數,適用大檔案完整性驗證。
DES/數位簽章:對稱/非對稱加密結合,用於機密資料驗證與防偽(銀行交易系統)。

7. 實戰應用:防止程式被竄改

編譯時計算執行檔的 MD5 雜湊值並內嵌於程式中。執行時重新計算並比對,若資源被 PE 編輯器修改,雜湊值不符將提示「檔案已損毀」並拒絕執行。進階做法可採用 DES 數位簽章提高安全性。

程式自我校驗示意
圖一:程式自我校驗流程示意

原始碼下載

完整實作範例包含各類校驗演算法與自我保護示範程式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved