CRC-32 校驗和是一個八位數的十六進位值,根據一段位元組序列計算得出,用於偵測資料中意外的變動。本頁的 CRC32 計算工具採用精確的 CRC-32/ISO-HDLC 變體,該變體使用多項式 0x04C11DB7、初始值 0xFFFFFFFF,以及最終的 XOR 值 0xFFFFFFFF。此變體廣泛應用於乙太網路訊框、ZIP 壓縮檔和韌體映像,以確保資料在傳輸或儲存過程中的完整性。與密碼雜湊不同,CRC-32 無法抵禦蓄意的竄改,但運算效率高,足以偵測位元翻轉或位元組損壞等隨機錯誤。

當您需要驗證檔案或訊息是否遭到變更時,計算 CRC-32 校驗和是一種快速且可靠的方法。例如,韌體開發人員常會在二進位檔標頭中內含一個 CRC-32 值,讓開機載入程式在執行前確認映像是否完整。同樣地,Modbus 等網路通訊協定會在處理封包前使用 CRC-32 進行驗證。本頁的工具可讓您輸入 UTF-8 文字或原始十六進位位元組,並即時產生八位數的校驗和,簡化了這項流程。這省去了手動計算或自訂腳本的需要,讓技術與非技術使用者都能輕鬆使用。

雖然 CRC-32 對錯誤偵測非常有效,但並不適合用於安全性敏感的應用程式。如果攻擊者能同時修改資料和校驗和,則可以完全繞過檢查。對於擔心惡意竄改的場景,建議使用 HMAC-SHA-256 等密碼學方法。本網站的 HMAC 產生器 工具可使用密鑰建立安全的雜湊,確保只有經授權的參與者才能產生有效的校驗和。然而,對於大多數日常使用案例(例如驗證下載的檔案、檢查韌體完整性或偵錯網路封包),CRC-32 仍然是實用且被廣泛採用的解決方案。

how to calculate crc
how to calculate crc

什麼是 CRC-32 以及何時使用

CRC-32,即循環冗餘校驗-32(Cyclic Redundancy Check-32),是一種校驗和演算法,可從位元組輸入中產生一個 32 位元(八位數十六進位)值。其運作方式是將輸入資料視為一個大型的二進位數字,並除以一個固定的多項式(ISO-HDLC 變體中為 0x04C11DB7)。此除法的餘數即為 CRC-32 校驗和。此過程對輸入資料的變動極為敏感,即使是單一位元的翻轉也會產生完全不同的校驗和,因此對於偵測錯誤非常有效。

CRC-32 的主要用途是在資料傳輸與儲存中進行錯誤偵測。例如,乙太網路訊框會內含一個 CRC-32 校驗和,以偵測網路傳輸期間的損壞。同樣地,ZIP 壓縮檔會使用 CRC-32 來驗證已壓縮檔案的完整性。在嵌入式系統中,韌體映像常會在標頭中內含一個 CRC-32 值,讓開機載入程式在執行前確認映像是否完整。與密碼雜湊不同,CRC-32 的設計目的是快速且運算負擔輕,非常適合效能至關重要的即時應用。

然而,CRC-32 並非適用於所有場景。它無法偵測蓄意的竄改,因為攻擊者可以同時修改資料和校驗和使其相符。對於安全性敏感的應用程式,例如驗證軟體更新或驗證訊息真偽,則需要使用 SHA-256 或 HMAC 等密碼雜湊。HMAC 產生器 工具可使用密鑰建立安全的雜湊,確保只有經授權的參與者才能產生有效的校驗和。不過,對於大多數非安全性的使用案例,CRC-32 提供了一種簡單且有效的方式來確保資料完整性。

如何使用線上工具計算 CRC-32

  1. 確認輸入格式。 決定您的資料是純 UTF-8 文字(例如韌體字串)還是原始十六進位位元組(例如二進位檔案傾印)。該工具同時支援這兩種格式。
  2. 開啟 CRC32 計算工具。 在瀏覽器中前往 /encoding/crc32-calculator/。無需安裝或註冊。
  3. 輸入您的資料。
    • 若是 UTF-8 文字:將文字直接貼到「UTF-8 text」(UTF-8 文字) 欄位中。
    • 若是十六進位位元組:請以兩位數一組的方式輸入至「Hexadecimal bytes」(十六進位位元組) 欄位(例如 48 65 6C 6C 6F 代表 "Hello")。允許使用空格、逗號或不加分隔符號。
  4. 點擊「Calculate」(計算)。 該工具會使用 CRC-32/ISO-HDLC 演算法處理輸入,並在結果欄位中顯示八位數的校驗和。
  5. 比較結果。 如果您有一個預期的校驗和(例如來自韌體標頭或網路通訊協定),請驗證產生的值是否相符。不相符表示資料損壞。
  6. 複製結果。 使用「Copy」(複製) 按鈕儲存校驗和,以供文件記錄或後續使用。

CRC-32 與其他校驗和方法的比較

方法 輸出大小 使用場景 安全性 速度
CRC-32 8 個十六進位數字 (32 位元) 檔案、韌體及網路封包的錯誤偵測 無法抵禦蓄意竄改 非常快
XOR-8 2 個十六進位數字 (8 位元) 序列通訊中的簡易錯誤偵測 不安全 最快
Modbus LRC 2 個十六進位數字 (8 位元) Modbus ASCII 通訊協定中的錯誤偵測 不安全 快速
SHA-256 64 個十六進位數字 (256 位元) 密碼學驗證與資料完整性 可抵禦竄改 較慢
HMAC-SHA-256 64 個十六進位數字 (256 位元) 使用密鑰進行訊息驗證 安全 較慢

上表將 CRC-32 與其他常見的校驗和及雜湊方法進行了比較。CRC-32 在速度和錯誤偵測能力之間取得了平衡,非常適合非安全性的使用案例。例如,雖然 XOR-8 和 Modbus LRC 速度更快,但它們僅限於 8 位元輸出,因此更容易遺漏錯誤。另一方面,SHA-256 和 HMAC-SHA-256 提供密碼學安全性,但運算負擔較重,對於簡單的錯誤偵測而言是大材小用。本網站的 Checksum Calculator (校驗和計算機) 工具可以計算 XOR-8 和 Modbus LRC 值,如果這些方法更符合您的需求,可以使用該工具。

CRC-32 計算的常見場景

CRC-32 應用於各種實際場景以確保資料完整性。以下是一些計算 CRC-32 校驗和至關重要的常見場景:

韌體更新

嵌入式系統常會在韌體標頭中內含 CRC-32 校驗和,以在執行前驗證二進位檔的完整性。例如,開機載入程式可能會計算韌體映像的 CRC-32,並將其與標頭中儲存的值進行比對。如果兩者相符,開機載入程式會繼續進行更新;否則會拒絕該映像,以避免裝置變磚。此流程可確保韌體在下載或儲存過程中未遭到損壞。

檔案傳輸

透過不穩定的網路傳輸檔案時,CRC-32 校驗和可偵測損壞。例如,ZIP 壓縮檔會為每個已壓縮的檔案內含一個 CRC-32 值。下載壓縮檔後,接收端可以計算每個檔案的 CRC-32,並與儲存的值進行比對。若不相符,表示該檔案在傳輸過程中損壞,應重新下載。此方法廣泛用於軟體發佈和備份系統中。

網路通訊協定

Ethernet 和 Modbus 等網路通訊協定會在處理封包前使用 CRC-32 進行驗證。例如,乙太網路訊框包含一個 32 位元的 CRC 欄位,用於偵測傳輸過程中引入的錯誤。如果接收到的訊框所計算出的 CRC-32 與傳送的值不相符,則該訊框會被捨棄,並可能會要求傳送端重新傳送。這可確保只有完整的資料才會被接收裝置處理。

偵錯與開發

開發人員常會在偵錯期間使用 CRC-32 校驗和來驗證資料的完整性。例如,在測試新的韌體版本時,開發人員可能會計算二進位檔的 CRC-32,並將其與預期值進行比對,以確保建構程序已成功完成。同樣地,在偵錯網路通訊時,CRC-32 校驗和可協助識別損壞的封包或設定錯誤的通訊協定。

對於安全性至關重要的場景,例如驗證軟體更新或驗證訊息真偽,CRC-32 並不足夠。在這些情況下,必須使用 HMAC-SHA-256 等密碼學方法。HMAC 產生器 工具可使用密鑰建立安全的雜湊,確保只有經授權的參與者才能產生有效的校驗和。然而,對於大多數非安全性的使用案例,CRC-32 提供了一種簡單且有效的解決方案。

如何手動驗證 CRC-32 檢查碼

雖然 CRC32 計算機工具能自動完成整個流程,但了解 CRC-32 的運作方式仍有助於排解問題,或在自訂軟體中實作該演算法。以下是手動計算流程的簡化說明,並以字串 "123456789" 為例進行逐步演算。

CRC-32/ISO-HDLC 演算法使用以下參數:

  • 多項式:0x04C11DB7(以 32 位元二進位數表示)
  • 初始值:0xFFFFFFFF
  • 最終 XOR:0xFFFFFFFF

該演算法對輸入資料的每個位元組處理如下:

  1. 將 CRC 暫存器初始化為初始值(0xFFFFFFFF)。
  2. 對於輸入資料中的每個位元組:
    • 將該位元組與 CRC 暫存器的最低有效位元組(LSB)進行 XOR。
    • 對於該位元組中的每個位元(從 MSB 到 LSB):
      • 若 CRC 暫存器的 MSB 為 1,則將暫存器左移 1 位元,並與多項式進行 XOR。
      • 若 MSB 為 0,則將暫存器左移 1 位元。
  3. 處理完所有位元組後,將最終的 CRC 暫存器與最終 XOR 值(0xFFFFFFFF)進行 XOR。
  4. 所得結果即為 CRC-32 檢查碼。

以下是字串 "123456789" 的逐步演算範例(UTF-8 位元組:0x31、0x32、0x33、0x34、0x35、0x36、0x37、0x38、0x39):

步驟 位元組 CRC 暫存器(十六進位)
初始 - FFFFFFFF
1 31 C450D697
2 32 79A371E7
3 33 E0D397A3
4 34 912C8FCB
5 35 B6C57C8D
6 36 5B2B4E8E
7 37 2A83C86C
8 38 F20C8E4E
9 39 CBF43926
最終 XOR - 340BC6D9

字串 "123456789" 的最終 CRC-32 檢查碼為 CBF43926,這與 CRC-32/ISO-HDLC 變體的預期值相符。此範例展示了演算法如何逐位元組處理以產生檢查碼。雖然對於大型資料集來說手動計算並不實際,但這有助於深入理解演算法的運作原理,並可用於除錯實作上的問題。

對大多數使用者而言,CRC32 計算機工具是計算 CRC-32 檢查碼最快且最可靠的方式。它能處理所有邊界情況,例如非 ASCII 的 UTF-8 字元以及格式錯誤的十六進位輸入,確保每次皆能得出準確結果。無論您是要驗證韌體映像、除錯網路通訊協定,或是檢查下載的檔案,這套工具都能簡化流程並消除手動出錯的風險。

相關延伸閱讀:如何計算檢查碼:XOR-8 與 Modbus LRC

若您正在權衡各種方案,如何產生 HMAC:SHA-256、SHA-384 與 SHA-512 一文有更詳細的說明。