CRC-32 / ISO-HDLC
PKZip · PNG · Ethernet
Việc triển khai CRC-32 phổ biến nhất, còn được gọi là CRC-32b. Nó sử dụng dạng phản ánh của đa thức 0x04C11DB7, cụ thể là 0xEDB88320. Cả byte đầu vào và đầu ra đều được phản ánh bit (LSB đầu tiên), với giá trị ban đầu và XOR cuối cùng đều được đặt thành 0xFFFFFFFF.
Được sử dụng rộng rãi bởi hình ảnh ZIP, gzip, PNG, khung Ethernet (IEEE 802.3), PKCS#7 và nhiều hệ thống cũ. Trên thực tế đây là biến thể "CRC-32 mặc định".
| Đa thức | 0x04C11DB7 (bình thường) / 0xEDB88320 (phản ánh) |
| Giá trị ban đầu | 0xFFFFFFFF |
| Phản xạ đầu vào | Có (RefIn = true) |
| Phản xạ đầu ra | Có (RefOut = true) |
| XOR cuối cùng | 0xFFFFFFFF |
| Kiểm tra giá trị | 0xCBF43926 (dành cho "123456789") |
CRC-32C / Castagnoli
iSCSI · NVMe · SCTP
Được đề xuất bởi G. Castagnoli và các đồng nghiệp vào năm 1993, biến thể này sử dụng đa thức 0x1EDC6F41 (dạng phản ánh 0x82F63B78). Ở cùng khoảng cách Hamming, nó cung cấp khả năng phát hiện lỗi cụm mạnh hơn đa thức ISO-HDLC.
Khả năng tăng tốc phần cứng có sẵn thông qua hướng dẫn Intel SSE4.2 và ARM CRC32. Nó được sử dụng rộng rãi trong các giao thức lưu trữ và truyền tải hiện đại như iSCSI, NVMe, Btrfs và SCTP.
| Đa thức | 0x1EDC6F41 (bình thường) / 0x82F63B78 (phản ánh) |
| Giá trị ban đầu | 0xFFFFFFFF |
| Phản xạ đầu vào | Có (RefIn = true) |
| Phản xạ đầu ra | Có (RefOut = true) |
| XOR cuối cùng | 0xFFFFFFFF |
| Kiểm tra giá trị | 0xE3069283 (dành cho "123456789") |
CRC-32 / MPEG-2
MPEG-2 · DVB · ATSC
Sử dụng đa thức 0x04C11DB7 giống như ISO-HDLC, nhưng cả đầu vào và đầu ra đều không phản ánh bit (MSB đầu tiên, big-endian). Giá trị ban đầu là 0xFFFFFFFF và XOR cuối cùng bị tắt (XorOut = 0x00000000).
Chủ yếu được sử dụng cho các bảng PSI/SI trong luồng truyền tải MPEG-2 (PAT, PMT, NIT và các bảng liên quan), cùng với việc kiểm tra tính toàn vẹn trong hệ thống phát sóng DVB và ATSC.
| Đa thức | 0x04C11DB7 |
| Giá trị ban đầu | 0xFFFFFFFF |
| Phản xạ đầu vào | Không (RefIn = false) |
| Phản xạ đầu ra | Không (RefOut = false) |
| XOR cuối cùng | 0x00000000 (bị vô hiệu hóa) |
| Kiểm tra giá trị | 0x0376E6E7 (dành cho "123456789") |
CRC-32 / BZIP2
BZip2 · AAL5 · DECT
Các tham số của nó gần giống với MPEG-2 (đa thức 0x04C11DB7, không phản chiếu, giá trị ban đầu 0xFFFFFFFF). Sự khác biệt duy nhất là XOR cuối cùng với 0xFFFFFFFF , lật từng bit. Nó còn được gọi là CRC-32/AAL5 hoặc CRC-32/DECT-B.
Được sử dụng bởi định dạng tệp nén BZip2 và trường tổng kiểm tra đoạn giới thiệu của giao thức ATM AAL5.
| Đa thức | 0x04C11DB7 |
| Giá trị ban đầu | 0xFFFFFFFF |
| Phản xạ đầu vào | Không (RefIn = false) |
| Phản xạ đầu ra | Không (RefOut = false) |
| XOR cuối cùng | 0xFFFFFFFF |
| Kiểm tra giá trị | 0xFC891918 (dành cho "123456789") |
Văn bản UTF-8
Mặc định · Chung
Xử lý đầu vào dưới dạng chuỗi UTF-8 , chuyển đổi nó thành byte rồi tính toán CRC32. Đây là chế độ phổ biến nhất cho văn bản thuần túy, mã nguồn, JSON và nội dung tương tự.
Lưu ý: cùng một văn bản được mã hóa bằng bộ ký tự khác, chẳng hạn như GBK hoặc UTF-16 sẽ tạo ra luồng byte khác và do đó có giá trị CRC32 khác. Công cụ này luôn sử dụng UTF-8.
| Tốt nhất cho | Văn bản thuần túy, mã nguồn, JSON, XML |
| Ví dụ | "Xin chào" → 48 65 6C 6C 6F (5 byte) |
| Ký tự CJK | Hầu hết các ký tự CJK sử dụng 3 byte trong UTF-8 |
thập lục phân
Dữ liệu nhị phân · Khung giao thức
Xử lý đầu vào dưới dạng thô bằng chữ byte thập lục phân . Dấu cách và ngắt dòng được bỏ qua. Cứ hai ký tự hex sẽ trở thành một byte (00–FF).
Hữu ích khi bạn cần CRC kiểm tra dữ liệu nhị phân chính xác như khung mạng, đoạn hình ảnh chương trình cơ sở hoặc kết xuất bộ nhớ. Bạn có thể dán trực tiếp đầu ra kết xuất Wireshark hoặc hex.
| Định dạng | Chỉ cho phép 0-9 và a-f / A-F được phép |
| Số lượng ký tự | Phải chẵn (2 ký tự mỗi byte) |
| Ví dụ | 48656C6C6F = "Xin chào" (5 byte) |
| Khoảng trắng | Tự động bị bỏ qua. 48 65 6C giống với 48656C |
cơ sở64
Nhị phân được mã hóa · Chứng chỉ · Hình ảnh
Xử lý đầu vào dưới dạng chuỗi được mã hóa Base64 , giải mã nó thành byte thô rồi tính toán CRC32. Hữu ích cho chứng chỉ PEM, tải trọng JWT, URI dữ liệu và nội dung Base64 khác.
Hỗ trợ bảng chữ cái Base64 tiêu chuẩn (A-Z a-z 0-9 + /). Ký tự đệm = là tùy chọn. Base64 an toàn cho URL ( - _ ) không được hỗ trợ.
| Bảng chữ cái | A-Z a-z 0-9 + / = |
| Ví dụ | SGVsbG8= → "Xin chào" (5 byte) |
| URL an toàn | Không được hỗ trợ. Thay thế -→+ và _→/ trước |
| ⚠ 1 Ký tự | Không hợp lệ — 6 bit không đủ để tạo thành 1 byte (yêu cầu 8 bit) |
| 2 ký tự | Giải mã thành 1 byte (đầu vào hợp lệ tối thiểu) |
| 3 ký tự | Giải mã thành 2 byte |
| 4 ký tự | Giải mã thành 3 byte (mẫu lặp lại sau mỗi 4 ký tự) |
thập lục phân
Phổ biến nhất · Mặc định
Hiển thị giá trị dưới dạng số thập lục phân viết hoa gồm 8 chữ số có tiền tố 0x . Mỗi ký tự đại diện cho 4 bit, tổng cộng là 32 bit. Đây là định dạng chuẩn được sử dụng trong hầu hết các công cụ, mã nguồn và tài liệu.
So với đầu ra thập phân, hệ thập lục phân giúp kiểm tra ranh giới byte dễ dàng hơn và khớp với các kết xuất bộ nhớ cũng như các trường giao thức một cách tự nhiên hơn.
| Ví dụ | 0xCBF43926 |
| Độ dài | 8 ký tự thập lục phân = 32 bit |
| Căn cứ | Căn cứ 16 (0-9, A-F) |
| Tốt nhất cho | Mã, tài liệu, Wireshark, trình soạn thảo hex |
thập phân
Số nguyên 32-bit không dấu
Hiển thị tổng kiểm tra dưới dạng số nguyên thập phân 32 bit không dấu trong phạm vi 0–4,294,967,295 (2³²−1). Một số ngôn ngữ và công cụ so sánh các giá trị CRC ở dạng thập phân và các trường cơ sở dữ liệu thường lưu trữ cách biểu diễn này.
Lưu ý: Kết quả CRC32 phải được coi là số nguyên không dấu. Trong các kiểu int có dấu như Java hoặc C#, các giá trị trên 0x7FFFFFFF có thể xuất hiện âm và phải được chuyển đổi thành uint hoặc dạng biểu diễn không dấu rộng hơn.
| Ví dụ | 3421780262 |
| Phạm vi | 0–4.294.967.295 |
| Lưu ý | Đối với Java int, hãy chuyển đổi bằng & 0xFFFFFFFFL |
| Tốt nhất cho | Cơ sở dữ liệu, giá trị cấu trúc Python, so sánh số |
nhị phân
Phân tích cấp độ bit
Hiển thị tổng kiểm tra dưới dạng chuỗi nhị phân 32 bit có tiền tố 0b . Mỗi ký tự là 0 hoặc 1, được căn chỉnh bằng bit quan trọng nhất ở bên trái và được đệm bằng các số 0 đứng đầu khi cần thiết.
Chủ yếu hữu ích để hiểu thuật toán CRC nội bộ, nghiên cứu phép chia đa thức, giảng dạy và các kịch bản nhúng cần xử lý tổng kiểm tra ở cấp độ bit.
| Ví dụ | 0b11001011…00100110 |
| Độ dài | Đã sửa ở 32 bit với phần đệm 0 bên trái |
| Bit cao nhất | Bit 31 (MSB) xuất hiện ở ngoài cùng bên trái |
| Tốt nhất cho | Phân tích thuật toán, giảng dạy, gỡ lỗi nhúng |
bát phân
Unix · Hệ thống tệp
Hiển thị tổng kiểm tra dưới dạng số bát phân gồm 11 chữ số có tiền tố 0o . Cần nhiều nhất 11 ký tự bát phân cho 32 bit vì 3×11 = 33 > 32. Mỗi chữ số bát phân đại diện cho 3 bit.
Đầu ra bát phân không phổ biến trong quy trình làm việc CRC hiện đại, nhưng nó vẫn xuất hiện trong một số công cụ Unix, chuỗi công cụ chương trình cơ sở nhúng và thông số kỹ thuật giao thức truyền thông cũ hơn.
| Ví dụ | 0o31572031046 |
| Độ dài | Tối đa 11 chữ số bát phân |
| Mỗi chữ số | Biểu thị 3 bit (0-7) |
| Tốt nhất cho | Các công cụ Unix, thông số giao thức cũ hơn |