CRC-32 dla „123456789”
0xCBF43926 0xCBF43926 dla CRC-32/ISO-HDLC — wariantu, którego używają ZIP, PNG, Ethernet i gzip.
Wklej hex albo tekst i policz naraz wszystkie 63 warianty CRC-8, CRC-16 i CRC-32. Suma kontrolna z urządzenia się nie zgadza? Wpisz ją, a narzędzie wskaże wariant: MODBUS, CCITT-FALSE, XMODEM, KERMIT. Wszystko lokalnie.
| Wariant | Wynik | Poly | Init | RefIn/RefOut | XorOut |
|---|---|---|---|---|---|
| CRC-8 | |||||
| CRC-8/AUTOSAR | 0x2F | 0xFF | false / false | 0xFF | |
| CRC-8/BLUETOOTH | 0xA7 | 0x00 | true / true | 0x00 | |
| CRC-8/CDMA2000 | 0x9B | 0xFF | false / false | 0x00 | |
| CRC-8/DARC | 0x39 | 0x00 | true / true | 0x00 | |
| CRC-8/DVB-S2 | 0xD5 | 0x00 | false / false | 0x00 | |
| CRC-8/GSM-A | 0x1D | 0x00 | false / false | 0x00 | |
| CRC-8/GSM-B | 0x49 | 0x00 | false / false | 0xFF | |
| CRC-8/HITAG | 0x1D | 0xFF | false / false | 0x00 | |
| CRC-8/I-432-1 CRC-8/ITU | 0x07 | 0x00 | false / false | 0x55 | |
| CRC-8/I-CODE | 0x1D | 0xFD | false / false | 0x00 | |
| CRC-8/LTE | 0x9B | 0x00 | false / false | 0x00 | |
| CRC-8/MAXIM-DOW CRC-8/MAXIM · DOW-CRC | 0x31 | 0x00 | true / true | 0x00 | |
| CRC-8/MIFARE-MAD | 0x1D | 0xC7 | false / false | 0x00 | |
| CRC-8/NRSC-5 | 0x31 | 0xFF | false / false | 0x00 | |
| CRC-8/OPENSAFETY | 0x2F | 0x00 | false / false | 0x00 | |
| CRC-8/ROHC | 0x07 | 0xFF | true / true | 0x00 | |
| CRC-8/SAE-J1850 CRC-8/J1850 | 0x1D | 0xFF | false / false | 0xFF | |
| CRC-8/SMBUS CRC-8 | 0x07 | 0x00 | false / false | 0x00 | |
| CRC-8/TECH-3250 CRC-8/AES · CRC-8/EBU | 0x1D | 0xFF | true / true | 0x00 | |
| CRC-8/WCDMA | 0x9B | 0x00 | true / true | 0x00 | |
| CRC-16 | |||||
| CRC-16/ARC CRC-16 · CRC-16/IBM · CRC-16/LHA | 0x8005 | 0x0000 | true / true | 0x0000 | |
| CRC-16/CDMA2000 | 0xC867 | 0xFFFF | false / false | 0x0000 | |
| CRC-16/CMS | 0x8005 | 0xFFFF | false / false | 0x0000 | |
| CRC-16/DDS-110 | 0x8005 | 0x800D | false / false | 0x0000 | |
| CRC-16/DECT-R R-CRC-16 | 0x0589 | 0x0000 | false / false | 0x0001 | |
| CRC-16/DECT-X X-CRC-16 | 0x0589 | 0x0000 | false / false | 0x0000 | |
| CRC-16/DNP | 0x3D65 | 0x0000 | true / true | 0xFFFF | |
| CRC-16/EN-13757 | 0x3D65 | 0x0000 | false / false | 0xFFFF | |
| CRC-16/GENIBUS CRC-16/DARC · CRC-16/EPC · CRC-16/EPC-C1G2 · CRC-16/I-CODE | 0x1021 | 0xFFFF | false / false | 0xFFFF | |
| CRC-16/GSM | 0x1021 | 0x0000 | false / false | 0xFFFF | |
| CRC-16/IBM-3740 CRC-16/CCITT-FALSE · CRC-16/AUTOSAR | 0x1021 | 0xFFFF | false / false | 0x0000 | |
| CRC-16/IBM-SDLC CRC-16/X-25 · CRC-16/X25 · CRC-16/ISO-HDLC · CRC-B · X-25 | 0x1021 | 0xFFFF | true / true | 0xFFFF | |
| CRC-16/ISO-IEC-14443-3-A CRC-A | 0x1021 | 0xC6C6 | true / true | 0x0000 | |
| CRC-16/KERMIT CRC-16/CCITT · CRC-16/CCITT-TRUE · CRC-16/V-41-LSB · CRC-CCITT | 0x1021 | 0x0000 | true / true | 0x0000 | |
| CRC-16/LJ1200 | 0x6F63 | 0x0000 | false / false | 0x0000 | |
| CRC-16/M17 | 0x5935 | 0xFFFF | false / false | 0x0000 | |
| CRC-16/MAXIM-DOW CRC-16/MAXIM | 0x8005 | 0x0000 | true / true | 0xFFFF | |
| CRC-16/MCRF4XX | 0x1021 | 0xFFFF | true / true | 0x0000 | |
| CRC-16/MODBUS | 0x8005 | 0xFFFF | true / true | 0x0000 | |
| CRC-16/NRSC-5 | 0x080B | 0xFFFF | true / true | 0x0000 | |
| CRC-16/OPENSAFETY-A | 0x5935 | 0x0000 | false / false | 0x0000 | |
| CRC-16/OPENSAFETY-B | 0x755B | 0x0000 | false / false | 0x0000 | |
| CRC-16/PROFIBUS CRC-16/IEC-61158-2 | 0x1DCF | 0xFFFF | false / false | 0xFFFF | |
| CRC-16/RIELLO | 0x1021 | 0xB2AA | true / true | 0x0000 | |
| CRC-16/SPI-FUJITSU CRC-16/AUG-CCITT | 0x1021 | 0x1D0F | false / false | 0x0000 | |
| CRC-16/T10-DIF | 0x8BB7 | 0x0000 | false / false | 0x0000 | |
| CRC-16/TELEDISK | 0xA097 | 0x0000 | false / false | 0x0000 | |
| CRC-16/TMS37157 | 0x1021 | 0x89EC | true / true | 0x0000 | |
| CRC-16/UMTS CRC-16/BUYPASS · CRC-16/VERIFONE | 0x8005 | 0x0000 | false / false | 0x0000 | |
| CRC-16/USB | 0x8005 | 0xFFFF | true / true | 0xFFFF | |
| CRC-16/XMODEM CRC-16/ACORN · CRC-16/LTE · CRC-16/V-41-MSB · ZMODEM | 0x1021 | 0x0000 | false / false | 0x0000 | |
| CRC-32 | |||||
| CRC-32/AIXM CRC-32Q | 0x814141AB | 0x00000000 | false / false | 0x00000000 | |
| CRC-32/AUTOSAR | 0xF4ACFB13 | 0xFFFFFFFF | true / true | 0xFFFFFFFF | |
| CRC-32/BASE91-D CRC-32D | 0xA833982B | 0xFFFFFFFF | true / true | 0xFFFFFFFF | |
| CRC-32/BZIP2 CRC-32/AAL5 · CRC-32/DECT-B · B-CRC-32 | 0x04C11DB7 | 0xFFFFFFFF | false / false | 0xFFFFFFFF | |
| CRC-32/CD-ROM-EDC | 0x8001801B | 0x00000000 | true / true | 0x00000000 | |
| CRC-32/CKSUM CRC-32/POSIX | 0x04C11DB7 | 0x00000000 | false / false | 0xFFFFFFFF | |
| CRC-32/ISCSI CRC-32C · CRC-32/BASE91-C · CRC-32/CASTAGNOLI · CRC-32/INTERLAKEN | 0x1EDC6F41 | 0xFFFFFFFF | true / true | 0xFFFFFFFF | |
| CRC-32/ISO-HDLC CRC-32 · CRC-32/ADCCP · CRC-32/V-42 · CRC-32/XZ · PKZIP | 0x04C11DB7 | 0xFFFFFFFF | true / true | 0xFFFFFFFF | |
| CRC-32/JAMCRC | 0x04C11DB7 | 0xFFFFFFFF | true / true | 0x00000000 | |
| CRC-32/MEF | 0x741B8CD7 | 0xFFFFFFFF | true / true | 0x00000000 | |
| CRC-32/MPEG-2 | 0x04C11DB7 | 0xFFFFFFFF | false / false | 0x00000000 | |
| CRC-32/XFER | 0x000000AF | 0x00000000 | false / false | 0x00000000 | |
Przydaje się, gdy dokumentacja urządzenia podaje wielomian spoza powyższej tabeli.
Zbudowane i zweryfikowane przez zespół inżynierski Go Tools.
0xCBF43926 0xCBF43926 dla CRC-32/ISO-HDLC — wariantu, którego używają ZIP, PNG, Ethernet i gzip.
0x4B37 0x4B37, przy poly 0x8005, init 0xFFFF, odwróceniu bitów na wejściu i na wyjściu, bez końcowego XOR-a.
0x29B1 0x29B1. Formalna nazwa katalogowa to CRC-16/IBM-3740: poly 0x1021, init 0xFFFF, bez odwracania bitów.
63 Ten kalkulator obejmuje 63 skatalogowane warianty: 20 o szerokości 8, 31 o szerokości 16 i 12 o szerokości 32.
Cykliczny kod nadmiarowy traktuje blok danych jak współczynniki bardzo długiego wielomianu binarnego, dzieli go w arytmetyce modulo 2 przez ustalony wielomian generujący i zachowuje resztę. Ta reszta jest sumą kontrolną. Konstrukcja jest popularna, bo dzielenie sprowadza się do przesunięć i operacji XOR, co w sprzęcie kosztuje niemal nic, a algebra daje twarde gwarancje zamiast statystycznej nadziei: dobrze dobrany wielomian 16-bitowy wykrywa każdy błąd pojedynczego bitu, każdy błąd podwójnego bitu w użytecznym zakresie długości bloku, każdą nieparzystą liczbę przekłamanych bitów oraz każdą serię 16 lub mniej kolejnych przekłamanych bitów.
W praktyce CRC bywa mylące dlatego, że wielomian jest tylko jednym z sześciu parametrów. Dwie implementacje mogą zgadzać się co do wielomianu i mimo to różnić się w każdym wyniku, bo dzieli je wartość początkowa rejestru, to, czy bajty wejściowe i rejestr wyjściowy mają odwróconą kolejność bitów, oraz stała XOR-owana z wartością końcową. Wariant CRC to cały ten zestaw parametrów, a nie sam wielomian — dlatego nazwa taka jak „CRC-16” praktycznie nic nie identyfikuje i dlatego ta strona pokazuje obok każdego wyniku wielomian, wartość początkową, obie flagi odwrócenia i końcowy XOR, a szerokość służy za nagłówek grupy.
Jedno zastrzeżenie, którego tabela nie pokaże: wielomian 16-bitowy wykrywa każdą nieparzystą liczbę przekłamanych bitów tylko wtedy, gdy dzieli go x+1. Spełniają to dwa, które napotkasz najczęściej — 0x1021 i 0x8005 — ale nie wszystkie: CRC-16/T10-DIF i CRC-16/PROFIBUS należą do wyjątków.
// CRC-16/MODBUS: poly=0x8005, init=0xFFFF, refin/refout=true, xorout=0x0000
// Written in the reflected form, so the polynomial appears bit-reversed as 0xA001.
function crc16Modbus(bytes) {
let crc = 0xffff;
for (const byte of bytes) {
crc ^= byte;
for (let i = 0; i < 8; i++) {
crc = crc & 1 ? (crc >>> 1) ^ 0xa001 : crc >>> 1;
}
}
return crc;
}
crc16Modbus([0x01, 0x03, 0x00, 0x00, 0x00, 0x0a]); // 0xCDC5
// On the wire Modbus RTU sends the low byte first: ... 0x0A 0xC5 0xCD CRC-8, CRC-16 i CRC-32 przeliczają się razem podczas pisania. Nie trzeba niczego zgadywać na liście rozwijanej, zanim cokolwiek się pokaże.
Wystarczy wpisać otrzymaną sumę kontrolną, a warianty, które ją dają, zostaną podświetlone — identyfikacja nieznanego algorytmu zajmuje jeden krok zamiast dwudziestu.
Każdy wiersz podaje nazwę z katalogu RevEng oraz aliasy używane w terenie: CCITT-FALSE, CRC-16/IBM, CRC-32C, X-25 i pozostałe.
Wielomian, wartość początkowa, obie flagi odwrócenia bitów i końcowy XOR stoją obok każdego wyniku, więc dopasowanie można zweryfikować względem specyfikacji.
Szerokość, wielomian, wartość początkowa, odwrócenia bitów i końcowy XOR są w pełni edytowalne — dla wielomianów, które nigdy nie trafiły do żadnego katalogu.
Obliczenia wykonują się w przeglądarce. Produkcyjne ramki i obrazy firmware'u nie opuszczają maszyny.
123456789
CRC-32/ISO-HDLC = 0xCBF43926, CRC-16/MODBUS = 0x4B37, CRC-8/SMBUS = 0xF4
Każdy wariant CRC w katalogu RevEng publikuje swój wynik dla ciągu ASCII 123456789. To czyni z tego wejścia standardowy autotest: jeśli biblioteka nie zgadza się z tutejszą tabelą, to biblioteka jest błędna.
01 03 00 00 00 0A
CRC-16/MODBUS = 0xCDC5
Odczyt rejestrów przechowujących z urządzenia podrzędnego nr 1. Modbus RTU dokleja CRC młodszym bajtem do przodu, więc na łączu ta ramka idzie jako 01 03 00 00 00 0A C5 CD — i właśnie ta zamiana odpowiada za sporą część sum kontrolnych, których nikt nie potrafi odtworzyć.
DEADBEEF
MODBUS = 0xC19B, CCITT-FALSE = 0x4097, XMODEM = 0xC457, KERMIT = 0x1915
Wczytane w trybie Hex, a więc cztery bajty, a nie osiem znaków tekstu. Cztery najbardziej znane warianty CRC-16 dają dla nich zupełnie niepowiązane wyniki. Nic się nie zepsuło: różnią się wartością początkową, odwróceniem bitów i końcowym XOR-em, a nie poprawnością.
123456789 z wartością oczekiwaną 0x29B1
CRC-16/IBM-3740 (w instrukcji urządzenia może figurować jako CRC-16/CCITT-FALSE)
To jest ten przypadek, dla którego kalkulator powstał. Dane są, jest też suma kontrolna policzona przez kogoś innego, brakuje tylko nazwy wariantu — szuka się więc zestawu parametrów, który ją odtwarza.
Ramki protokołów są prawie zawsze szesnastkowe. Tryb tekstowy przydaje się tylko wtedy, gdy sumę kontrolną liczy się z dosłownego ciągu znaków, jak wartość autotestu 123456789.
W trybie szesnastkowym separatory są ignorowane, więc 01 03 00 00 00 0A, 0x01 0x03 oraz 010300 00000A zostaną przyjęte tak samo.
Tabela jest pogrupowana według szerokości. Nazwy formalne pochodzą z katalogu RevEng, a pod nimi widnieją aliasy, które najpewniej występują w instrukcji urządzenia.
Jeżeli suma kontrolna jest już znana, a szukany jest jej wariant, wystarczy wpisać ją w pole wartości oczekiwanej i odczytać podświetlony wiersz.
Pozostawiony tryb tekstowy sprawia, że kalkulator liczy sumę ze znaków ASCII zrzutu szesnastkowego, a nie z bajtów, które ten zrzut reprezentuje. Wystarczy przełączyć na tryb Hex — licznik bajtów pod przełącznikiem trybu pokazuje, który odczyt jest aktywny.
Text mode, input "01 03" -> 5 bytes: 30 31 20 30 33
Hex mode, input "01 03" -> 2 bytes: 01 03
Modbus RTU nadaje najpierw młodszy bajt CRC. Ramka kończąca się na C5 CD niesie sumę kontrolną 0xCDC5, a nie 0xC5CD.
expected 0xC5CD (bytes read in transmission order)
expected 0xCDC5 (bytes reassembled low-byte-first)
CRC obejmuje bajty, które je poprzedzają. Podanie z powrotem całej ramki wraz z zakończeniem daje residuum, a nie sumę kontrolną.
01 03 00 00 00 0A C5 CD <- trailer included
01 03 00 00 00 0A <- payload only
Szerokość 16 bitów ma 31 skatalogowanych wariantów. Bez pozostałych pięciu parametrów ta nazwa niczego nie zawęża.
spec says: "trailer is a CRC-16"
spec says: "CRC-16/MODBUS, poly 0x8005, init 0xFFFF, refin/refout true"
Narzędzia bezpieczeństwa
Odszyfruj AES online — GCM/CBC/CTR, hasło lub klucz surowy, automatyczne wykrywanie formatu OpenSSL i CryptoJS „U2FsdGVkX1”. 100% w przeglądarce, klucze nigdy jej nie opuszczają.
Narzędzia bezpieczeństwa
Darmowe szyfrowanie AES online — AES-128/192/256, GCM/CBC/CTR, hasło (PBKDF2) lub klucz surowy. Działa w 100% w przeglądarce; nic nie jest przesyłane.
Narzędzia bezpieczeństwa
Generuj i weryfikuj skróty bcrypt haseł online — regulowany koszt, prefiksy $2b$/$2a$/$2y$. W 100% w przeglądarce; Twoje hasło nigdy nie jest wysyłane.
Narzędzia bezpieczeństwa
Darmowy generator i weryfikator HMAC online. Oblicz HMAC-SHA256/SHA1/SHA384/SHA512 z kluczem Tekst, Hex lub Base64 i wynikiem Hex/Base64/Base64URL. 100% w Twojej przeglądarce — klucze nigdy nie opuszczają strony.
Narzędzia bezpieczeństwa
Dekoduj JWT online darmowym dekoderem JWT. Sprawdź header, payload, signature, claims i wygaśnięcie. W 100% w przeglądarce — token nie opuszcza urządzenia.
Narzędzia bezpieczeństwa
Darmowy generator i koder JWT online. Zbuduj header i payload, podpisz HS256, RS256 lub ES256 natychmiast. W 100% w przeglądarce — sekret i klucz nie opuszczają urządzenia.