小编LSt*_*ing的帖子

在C中消息开头用CRC哈希计算CRC32

我需要计算消息的CRC并将其放在此消息的开头,以便带有"prepended"补丁字节的消息的最终CRC等于0.我能够在几篇文章的帮助下很容易地做到这一点,但不是我的具体参数.问题是我必须使用给定的CRC32算法来计算内存块的CRC,但是我没有那个"反向"算法来计算那4个补丁字节/'种类的CRC'.给定CRC32算法的参数是:

  • 多项式:0x04C11DB7
  • Endianess:big-endian
  • 初始值:0xFFFFFFFF
  • 反映:错误
  • XOR输出:0L
  • 测试流:0x0123,0x4567,0x89AB,0xCDEF导致CRC = 0x612793C3

计算CRC的代码(半字节,表驱动,我希望数据类型定义不言自明):

uint32 crc32tab(uint16* data, uint32 len, uint32 crc)
{
    uint8 nibble;
    int i;
    while(len--)
    {
        for(i = 3; i >= 0; i--)
        {
            nibble = (*data >> i*4) & 0x0F;
            crc = ((crc << 4) | nibble) ^ tab[crc >> 28];
        }
        data++;
    }

    return crc;
}
Run Code Online (Sandbox Code Playgroud)

需要的表是(我认为short [16]表应该包含大[256]表中的每个第16个元素,但是这个表实际上包含了 16个元素,但这就是它提供给我的方式):

static const uint32 tab[16]=
{
    0x00000000, 0x04C11DB7, 0x09823B6E, 0x0D4326D9,
    0x130476DC, 0x17C56B6B, 0x1A864DB2, 0x1E475005,
    0x2608EDB8, 0x22C9F00F, 0x2F8AD6D6, …
Run Code Online (Sandbox Code Playgroud)

c crc32 reverse-engineering

4
推荐指数
2
解决办法
2075
查看次数

标签 统计

c ×1

crc32 ×1

reverse-engineering ×1