CoderTools

Máy tính CRC

Tính toán các giá trị checksum CRC với hỗ trợ nhập văn bản, hex và tệp tin

Nhập văn bản UTF-8, sẽ được chuyển đổi thành byte

Về thuật toán CRC

Kiểm tra dư thừa tuần hoàn (CRC) là mã phát hiện lỗi mạnh mẽ thường được sử dụng trong các mạng kỹ thuật số và thiết bị lưu trữ để phát hiện các thay đổi ngẫu nhiên đối với dữ liệu thô.

CRC được thiết kế để dễ dàng triển khai trong phần cứng nhị phân và đặc biệt hiệu quả trong việc phát hiện các lỗi phổ biến do nhiễu đường truyền.

Các thuật toán CRC được hỗ trợ

Công cụ này triển khai một loạt các thuật toán CRC tiêu chuẩn được sử dụng trong các giao thức công nghiệp và mạng.

Thuật toán Độ rộng Đa thức Sử dụng
CRC-88 bit0x07Kiểm tra dữ liệu đơn giản, cảm biến
CRC-16/Modbus16 bit0x8005Giao thức Modbus, công nghiệp
CRC-16/CCITT16 bit0x1021X.25, HDLC, Bluetooth
CRC-3232 bit0x04C11DB7ZIP, Ethernet, PNG
CRC-32C32 bit0x1EDC6F41iSCSI, SCTP, Btrfs
CRC-64/ECMA64 bit0x42F0E1EBA9EA3693ECMA-182, nén XZ

Các trường hợp sử dụng phổ biến

Xác minh gói tin mạng (Khung Ethernet)
Xác minh tính toàn vẹn của tệp (Lưu trữ ZIP)
Giao thức truyền thông công nghiệp (Modbus RTU)
Xác minh dữ liệu hệ thống lưu trữ
Truyền dữ liệu hệ thống nhúng
Kiểm tra tính toàn vẹn của Firmware

Câu hỏi thường gặp

CRC là gì và khác gì so với hàm băm mã hóa?

CRC (Kiểm tra Dư Vòng) là thuật toán tổng kiểm tra được thiết kế để phát hiện lỗi bit ngẫu nhiên trong quá trình truyền hoặc lưu trữ dữ liệu. Không giống các hàm băm mã hóa như SHA-256, CRC không được thiết kế để chống lại các thay đổi có chủ ý. Sử dụng CRC để phát hiện lỗi trong các giao thức truyền thông; sử dụng hàm băm mã hóa cho xác minh tính toàn vẹn khi bảo mật là ưu tiên.

Nên chọn biến thể CRC nào cho trường hợp sử dụng của tôi?

CRC-32 (ISO 3309) được dùng rộng rãi trong Ethernet, ZIP và PNG. CRC-16/MODBUS là tiêu chuẩn cho các giao thức công nghiệp. CRC-16/CCITT phù hợp với truyền thông nối tiếp. CRC-8 dùng cho các tin nhắn ngắn trong hệ thống nhúng. Nếu đặc tả giao thức xác định đa thức và giá trị khởi đầu cụ thể, hãy tuân thủ chính xác.

Tại sao kết quả CRC của tôi khác với giá trị mong đợi?

Kết quả CRC phụ thuộc vào bốn tham số: đa thức, giá trị khởi đầu, phản chiếu input/output và XOR cuối. Bất kỳ sự không khớp nào cũng sẽ cho kết quả khác. Hãy kiểm tra xem đầu vào được mã hóa là UTF-8, ASCII hay byte thô — cùng một chuỗi văn bản có thể tạo ra các chuỗi byte khác nhau và do đó cho giá trị CRC khác nhau.

Sự khác biệt giữa CRC-16/MODBUS và CRC-16/CCITT là gì?

Cả hai đều là CRC 16-bit với đa thức và giá trị khởi đầu khác nhau. CRC-16/MODBUS sử dụng đa thức 0x8005, giá trị khởi đầu 0xFFFF, với phản chiếu đầu vào và đầu ra. CRC-16/CCITT (còn gọi là CRC-CCITT hoặc CRC-16-IBM) sử dụng đa thức 0x1021, giá trị khởi đầu 0xFFFF. Chúng tạo ra đầu ra hoàn toàn khác nhau cho cùng một dữ liệu.

Tôi có thể tính CRC cho tệp nhị phân, không chỉ văn bản không?

Có — dán các byte hex của dữ liệu nhị phân bằng định dạng nhập Hex. Công cụ xử lý các giá trị byte thô bất kể chúng có biểu diễn ký tự có thể in hay không. Với các tệp nhị phân rất lớn, công cụ dòng lệnh như cksum hoặc binascii.crc32() của Python sẽ thực tế hơn.

Menu Nhanh

Chưa có công cụ gần đây