评估CRC-32实现的差异

时间:2010-11-17 18:54:48

标签: security language-agnostic checksum crc32

我已经看到了如下所示的相同基本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;
}

他们中的一些人在进入sbox之前对股息进行了异或。其他在进入位循环之前进行异或,其他则使用按位反射。

对于给定的用例,在CRC-32的不同实现之间是否需要考虑差异?是否使用按位反射或XOR-OUT必然比不使用按位反射或XOR-OUT更好?为什么还有这么多不同的实现呢?

2 个答案:

答案 0 :(得分:1)

CRC32在任何方面都不安全,因此从加密的角度来看,这些变化并不相关。它可能会影响分布属性,但我怀疑它是否相关。

CRC只是一个校验和,可防止随机更改(特别是位翻转),但不能用作加密哈希。你应该使用SHA-1或更好的。

答案 1 :(得分:0)

CRC32不是加密算法,所以你的问题让我觉得你需要考虑你长期使用它的内容。