Этот исходный код основан на adler32
По-видимому, обеспечивает тот же уровень безопасности crc32, но на 50% быстрее
Если у него есть недостаток, может кто-нибудь показать мне, где этот недостаток и почему лучше остаться с crc32?
Нелегко найти коллизии данных на том же уровне, что и crc32, по крайней мере, в моих тестах
unsigned int rsp32 (unsigned int adler, const unsigned char *buf, unsigned int len)
{
uchar s1 = adler & 0xff;
uchar s2 = (adler >> 8) & 0xff;
uchar s3 = (adler >> 16) & 0xff;
uchar s4 = (adler >> 24) & 0xff;
int svansa = 0;
int ok12 = len;
if (buf == NULL)
{
return 1L;
}
while (ok12)
{
s1 += buf[svansa++];
s2 += s1;
s3 += s2;
s4 += s3;
ok12--;
}
return s1 + (s2 << 8) + (s3 << 16) + (s4 << 24);
}