Reverse CRC32 file correct

0

Witam czy istnieje wsteczny algorytm do CRC32 ?
Potrzebuje algorytm który poprzez dopisanie bajtów na końcu pliku, "poprawi jego CRC32".
Z początku chciałem na chybił trafił dodawać bajty i sprawdzać czy CRC32 się już zgadza :) ale w 32 bitach można zapisać 4 miliardy wartości wiec trwało by to wieki bo mój PC liczy 724 CRC32 na sekundę (dla pliku 500kB)

Caly algo dla kolejnego bajtu to:
CRC:=CRCTable[byte(CrcOld xor Longint(b))] xor ((CrcOld shr 8) and $00FFFFFF)

i nie mam pojęcia jak to odwrócić, moze ktoś coś podpowie

0

ok troche rozkminiłem nie wiem czy dobrze :)
zerowa pozycja CRC Table to 00000000 a wiec pod czas liczenia crc na ostatnim bajcie pliku wstawić taki bajt żeby CrcOld xor bajt dał 0 czyli bajt=CrcOld to CRCTable[CrcOld xor bajt] zwraca 0000000 a za czym idzie dalsza część algo liczacego CRC wyzeruje pierwsze 8 bitów CRC jeśli to powtorzymy to wyzerujemy CRC32 a dalej można wkleić niezmodyfikowany plik i CRC32 bedzie takie same jak przed modyfikacją ale plik 2 razy więklszy :)

Moje rozkminianie :) :

NoweCRC := CRCTable[CrcOld xor bajt] xor ((CrcOld shr 8) and $00FFFFFF)

$0000000 xor ((CrcOld shr 8) and $00FFFFFF - zeruje pierwsze 8 bitów :

01001001 11111111 11000001 01111001 CRCOLD (wejściowa)
00000000 01001001 11111111 11000001 CRCOLD shr 8
00000000 00000000 00000000 00000000 zerowa pozycja z tablicy CRC
00000000 01001001 11111111 11000001 wynik $0000000 xor ((CrcOld shr 8)
00000000 11111111 11111111 11111111 $00FFFFFF
00000000 01001001 11111111 11000001 and (i wten sposob wyzerowałem pizrwsze 8 bitów:) )

00000000 01001001 11111111 11000001 CRCOLD
00000000 00000000 01001001 11111111 CRCOLD shr 8
00000000 00000000 00000000 00000000 zerowa pozycja z tablicy CRC
00000000 00000000 01001001 11111111 wynik $0000000 xor ((CrcOld shr 8)
00000000 11111111 11111111 11111111 $00FFFFFF
00000000 00000000 01001001 11111111 and (i wten sposob wyzerowałem kolejne 8 bitów :) )</image>

1 użytkowników online, w tym zalogowanych: 0, gości: 1