logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak ustalić algorytm wyliczania sumy kontrolnej dla danych bajtów i wyniku 0262?

asembler 21 Lut 2011 08:58 3399 14
REKLAMA
  • #1 9181477
    asembler
    Poziom 32  
    Posty: 2099
    Pomógł: 123
    Ocena: 11
    W jaki sposób odkryć jak była liczona suma kontrolna.


    Przykład:
    Mam kilkanascie bajtów a suma kontrolana wynosi 0262

    A5 E8 32 01 47 01 01 27 36 07 01 15 02 0B 77 62 02 AE
  • REKLAMA
  • #2 9181511
    kondziu jah
    Poziom 33  
    Posty: 2078
    Pomógł: 180
    Ocena: 122
    pl.m.wikipedia.org/wiki/Suma_kontrolna?wasRedirected=true
  • #3 9181546
    asembler
    Poziom 32  
    Posty: 2099
    Pomógł: 123
    Ocena: 11
    Możesz jaśniej ?
  • #4 9181587
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2203
    Jaśniej: nie ma zbyt wielu algorytmów liczenia CRC. Wystarczy więc przelecieć je po kolei i zobaczyć który pasuje. Zwykle każdy algorytm można inicjować wartościami 0 lub FF (FFFF). To nieco zwiększa liczbę kombinacji. Jeśli ktoś wymyślił niestandardowe CRC to masz lekko przechlapane, chyba, że lubisz się bawić w kryptografię :)
  • REKLAMA
  • #5 9181605
    asembler
    Poziom 32  
    Posty: 2099
    Pomógł: 123
    Ocena: 11
    Właśnie przeleciałem ją z kazdej strony, no chyba że coś źle robie.
    Suma kontrolna tych bajtow to dwa przedostatnie a ostatni jest kodem konca i nie wiem czy też ma być brany pod uwagę.
  • REKLAMA
  • #6 9181673
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2203
    Zwykle same bajty CRC też się bierze pod uwagę, bo CRC ma takie właściwości, że CRC całego bloku łacznie z bajtami zawierającymi CRC daje 0 lub 0xFF (0xFFFF).
  • REKLAMA
  • #7 9181740
    asembler
    Poziom 32  
    Posty: 2099
    Pomógł: 123
    Ocena: 11
    Wyczytałem ze niektóre mają rózny od 0 i -1 starter.
  • #8 9181950
    __Grzegorz__
    Poziom 30  
    Posty: 1413
    Pomógł: 196
    Ocena: 232
    tmf napisał:
    Zwykle same bajty CRC też się bierze pod uwagę, bo CRC ma takie właściwości, że CRC całego bloku łacznie z bajtami zawierającymi CRC daje 0 lub 0xFF (0xFFFF).


    Nieprawda, dla klasycznego CRC32 jest to 0x2144DF1C... (o ile dane czytamy bajtami i bajty CRC dołączone są od LSB do MSB).

    Klasyczne CRC = liczone w oparciu o tabelkę wygenerowaną w oparciu o klucz 0x04C11DB7.


    CRC obliczone dla bloku danych, z CRC dołączanym na końcu, da po prostu stałą wartość, niezależnie od zawartości danych w bloku, o ile nie nastąpiło przekłamanie...
  • #9 9181966
    Konto nie istnieje
    Poziom 1  
  • #10 9181993
    __Grzegorz__
    Poziom 30  
    Posty: 1413
    Pomógł: 196
    Ocena: 232
    atom:
    masz dane do wysłania,
    dodajesz CRC i ślesz to (dane + CRC)

    odbiorca odbiera wszystko i tym samym algorytmem liczy CRC dla odebranego bloku danych (dane + CRC).

    Jeżeli otrzymana wartość jest stała (z góry znana), nie było błędu w transmisji i dane (już bez CRC ) można mleć dalej...

    EDIT: Przepraszam, umknęło mi Twoje ostatnie zdanie....
  • #11 9182009
    asembler
    Poziom 32  
    Posty: 2099
    Pomógł: 123
    Ocena: 11
    atom1477 napisał:
    tmf napisał:
    Zwykle same bajty CRC też się bierze pod uwagę, bo CRC ma takie właściwości, że CRC całego bloku łacznie z bajtami zawierającymi CRC daje 0 lub 0xFF (0xFFFF).

    Przecież to nie miało by sensu. Jak policzysz CRC bloku wraz z dołączonym CRC tego bloku?
    Musiał być policzyć CRC bloku.
    Dodać CRC bloku do końca bloku.
    I ponownie policzyć CRC uzyzkując wynik równy 0 albo FFFF.
    I co teraz? Transmitować/zapisywać do pliku blok i zawsze stałe CRC równe 0 albo FFFF?
    Dołączanie CRC do bloku i liczenie z tego CRC ma zastosowanie dopiero przy odbiorze aby sprawdzić czy nie nastąpiło przekłamanie.

    To ma chyba tak dzialac ze liczymy sume kontrolną dodajemy ją na koncu, a dopiero odbiornik przelicza sume kontrolną danych wraz z sumą kontrolną i otrzymuje 0 lub -1.

    Dodano po 5 [minuty]:

    Oczywiscie pod warunkie że to jest jakies CRC.
  • Pomocny post
    #12 9182050
    __Grzegorz__
    Poziom 30  
    Posty: 1413
    Pomógł: 196
    Ocena: 232
    możesz podać więcej ciągów danych i ich "sumy kontrolne"?
  • #13 9182074
    asembler
    Poziom 32  
    Posty: 2099
    Pomógł: 123
    Ocena: 11
    Buahahahahahaa
    Problem rozwiązany:-)
    Tak sie zacząłem zastanawiać jak musiałby być zrobiony program aby mógł wyliczyc CRC nie uzywając RAM-u i to jeszcze w locie przy transmisji 115200.
    Wychodziło mi ze na to ma wszystko okolo 2 uS, więc stwierdziłem że tonie może byc CRC i faktycznie po kilku próbach okazało sie że to zwykła suma kontrolna - zwykła znaczy poprostu sumowanie bajtów w locie.
  • #14 9182077
    Konto nie istnieje
    Poziom 1  
  • #15 9182083
    asembler
    Poziom 32  
    Posty: 2099
    Pomógł: 123
    Ocena: 11
    Poprostu kalkulator HEX w ręke i policzyłem pomijając pierwszyi ostati bajt.

    Dodano po 3 [minuty]:

    To wyprostowałeś po łuku moim zdaniem :-)

Podsumowanie tematu

✨ W dyskusji poruszono temat obliczania sumy kontrolnej (CRC) dla zestawu bajtów. Użytkownik zadał pytanie, jak odkryć metodę obliczania sumy kontrolnej, podając przykład danych. Odpowiedzi wskazują, że istnieje kilka algorytmów do obliczania CRC, a każdy z nich można inicjować różnymi wartościami. Wskazano, że w przypadku klasycznego CRC32 używa się klucza 0x04C11DB7, a suma kontrolna powinna być obliczana na podstawie całego bloku danych, w tym bajtów CRC. Użytkownicy podkreślili, że w przypadku transmisji danych, odbiorca powinien obliczyć CRC dla odebranych danych, aby upewnić się, że nie wystąpiły błędy. Ostatecznie, jeden z uczestników dyskusji odkrył, że w jego przypadku nie była to suma kontrolna CRC, lecz prosta suma bajtów.
Wygenerowane przez model językowy.
REKLAMA