Оценка различий в реализациях CRC-32

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


person user407896    schedule 17.11.2010    source источник


Ответы (2)


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

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

person CodesInChaos    schedule 17.11.2010

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

person Thomas M. DuBuisson    schedule 17.11.2010