Оценка различий в реализациях CRC-32 - PullRequest
2 голосов
/ 17 ноября 2010

Я видел много разных реализаций одного и того же базового алгоритма 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, обязательно лучше, чем тот, который не использует?В любом случае, почему так много разных реализаций?

Ответы [ 2 ]

1 голос
/ 17 ноября 2010

CRC32 никоим образом не безопасен, поэтому с крипто-точки зрения изменения не имеют значения. Это может повлиять на свойства дистрибутива, но я сомневаюсь, что это тоже важно.

CRC - это просто контрольная сумма, защищающая от случайных изменений (в частности, битовых клипов), но не может использоваться в качестве криптографического хэша. Вы должны использовать SHA-1 или лучше для этого.

0 голосов
/ 17 ноября 2010

CRC32 не является криптографическим алгоритмом, поэтому ваш вопрос заставляет меня думать, что вам нужно подумать над тем, что вы используете его долго и усердно.

...