代码之家  ›  专栏  ›  技术社区  ›  Mandrake

请求对RSP32校验和进行评论

c
  •  0
  • Mandrake  · 技术社区  · 15 年前

    此源代码基于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);
    }
    
    1 回复  |  直到 15 年前
        1
  •  0
  •   caf    15 年前

    它确实提供了与CRC32相同的安全级别,即“完全没有安全性”。CRC和ADLER校验和不是密码散列,它们的设计不能承受蓄意攻击。它们的设计是为了防止不明智的错误,如线路噪音,等等。

    尽管如此,它看起来像是一个合理的校验和。