3

我已经看到了相同基本 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 的一种是否一定比不使用的更好?为什么会有这么多不同的实现呢?

4

2 回答 2

1

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

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

于 2010-11-17T19:01:40.117 回答
0

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

于 2010-11-17T19:01:17.627 回答