我已经看到了如下所示的相同基本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更好?为什么还有这么多不同的实现呢?
答案 0 :(得分:1)
CRC32在任何方面都不安全,因此从加密的角度来看,这些变化并不相关。它可能会影响分布属性,但我怀疑它是否相关。
CRC只是一个校验和,可防止随机更改(特别是位翻转),但不能用作加密哈希。你应该使用SHA-1或更好的。
答案 1 :(得分:0)
CRC32不是加密算法,所以你的问题让我觉得你需要考虑你长期使用它的内容。