Я видел много разных реализаций одного и того же базового алгоритма CRC-32, показанного ниже:
int remain;
int sbox[SIZESBOX];
int dividend;
int bit;
for(dividend = 0; dividend < SIZESBOX; dividend++)
{
remain = dividend << 24;
for(bit = 0; bit < 8; bit++)
{
if(remain & TOPBIT)
{
remain = (remain << 1) ^ POLYNOMIAL;
}
else
{
remain = (remain << 1);
}
}
sbox[dividend] = remain;
}
Некоторые из них XOR дивиденды перед входом в sbox.Другие XOR перед входом в битовый цикл, а другие используют побитовое отражение.
Есть ли различия, которые мне нужно учитывать между различными реализациями CRC-32 для данного варианта использования?Тот, который использует побитовое отражение или XOR-OUT, обязательно лучше, чем тот, который не использует?В любом случае, почему так много разных реализаций?