标签: crc

CRC预设和残留

我正在使用一个需要我生成16位CRC的设备.

该设备的数据表显示它需要以下CRC定义:

CRC Type    Length    Polynomial           Direction  Preset      Residue
CRC-CCITT   16 bits   x16 + x12 + x5 + 1   Forward    FFFF (16)   1D0F (16)

其中预置= FFFF(16位)和残留= 1D0F(16位)

我搜索了一个CRC算法并找到了这个链接:http: //www.lammertbies.nl/comm/info/crc-calculation.html

它有两个.CRC-CCITT(0xFFFF)CRC-CCITT(0x1D0F)

预设和残留物有什么区别?

crc preset

6
推荐指数
2
解决办法
5768
查看次数

用于Java/Groovy的CRC-16-ANSI库?

我需要在混合的java/groovy应用程序中为任意字符串计算CRC-16.具体来说,我需要CRC-16-ANSI又称CRC-16-IBM变体(有关详细信息,请参阅http://en.wikipedia.org/wiki/Cyclic_redundancy_check ;这是modbus/USB版本.)

我可以实现自己的,但我更愿意找到一个已经在某种程度上已经测试过的库.

这个问题很简单地涵盖了Java中的CRC 16,但由于正在讨论的应用程序是Xmodem,所以实现的是CRC-16-CCITT,这不是我正在寻找的.

我也模糊地了解sun.misc.CRC16,但是由于Oracle重新组织了Sun网站,因此很难找到该库的文档,我似乎无法找到它实现的CRC风格.

java groovy crc

6
推荐指数
1
解决办法
6009
查看次数

在Python中计算/验证bz2(bzip2)CRC32

我正在尝试计算/验证压缩bzip2档案的CRC32校验和.

.magic:16                       = 'BZ' signature/magic number
.version:8                      = 'h' for Bzip2 ('H'uffman coding)
.hundred_k_blocksize:8          = '1'..'9' block-size 100 kB-900 kB

.compressed_magic:48            = 0x314159265359 (BCD (pi))
.crc:32                         = checksum for this block
...
... 
.eos_magic:48                   = 0x177245385090 (BCD sqrt(pi))
.crc:32                         = checksum for whole stream
.padding:0..7                   = align to whole byte
Run Code Online (Sandbox Code Playgroud)

http://en.wikipedia.org/wiki/Bzip2

所以我知道CRC校验和在bz2文件中的位置,但我将如何验证它们.我应该用什么块binascii.crc32()来获得两个CRC?我已经尝试逐字节计算各种块的CRC,但还没有设法得到匹配.

谢谢.我将研究bzip2源bz2代码和Python库代码,以便找到一些东西,特别是在decompress()方法中.

更新1:

就我所见,块标题由以下标记标识.但是小的bz2文件不包含ENDMARK文件.(感谢adw,我们发现应该查找ENDMARK的位移值,因为压缩数据没有填充到字节.)

#define BLOCK_HEADER_HI  0x00003141UL
#define BLOCK_HEADER_LO  0x59265359UL

#define BLOCK_ENDMARK_HI 0x00001772UL
#define BLOCK_ENDMARK_LO 0x45385090UL
Run Code Online (Sandbox Code Playgroud)

这是从bzlib2recover.c源,块似乎始终在第80位,就在CRC校验和之前,这应该从CRC计算中省略,因为一个人不能将它自己的CRC校准为相同的CRC(你得到我的观点) …

c python crc32 crc bzip2

6
推荐指数
1
解决办法
3513
查看次数

CRC-CCITT 16位Python手动计算

问题

我正在为嵌入式设备编写代码.CRC-CCITT 16位计算的许多解决方案都需要库.

鉴于使用库几乎是不可能的并且耗尽其资源,需要一个函数.

可能解决方案

在线发现以下CRC计算.但是,它的实现是不正确的.

http://bytes.com/topic/python/insights/887357-python-check-crc-frame-crc-16-ccitt

def checkCRC(message):
    #CRC-16-CITT poly, the CRC sheme used by ymodem protocol
    poly = 0x11021
    #16bit operation register, initialized to zeros
    reg = 0xFFFF
    #pad the end of the message with the size of the poly
    message += '\x00\x00' 
    #for each bit in the message
    for byte in message:
        mask = 0x80
        while(mask > 0):
            #left shift by one
            reg<<=1
            #input the next bit from the message into the right hand side of the …
Run Code Online (Sandbox Code Playgroud)

python crc python-2.7 crc16

6
推荐指数
1
解决办法
2万
查看次数

Altera FPGA .jic 文件内的校验和

我正在使用一个小算法修改固件文件 (.jic) JTAG 间接配置文件,但更改文件内的数据会使其无法使用,因为文件中的某处有一个校验和需要更新。

我需要找到 .jic 文件中的校验和并破译使用哪种算法(crc32 等)。

每个字节上的位都被反转,我检查了正常和反转的位文件,但没有成功。

有人知道或者有办法找出 .jic 文件中的校验和数据在哪里吗?

crc fpga intel-fpga

6
推荐指数
1
解决办法
1617
查看次数

与 CRC-32 等相比,非加密哈希检测数据错误的效果如何?

MurmurHash3和 xxHash等非加密哈希几乎专为哈希表设计,但它们的功能似乎与CRC-32Adler-32Fletcher-32相当(甚至更有利)。非加密哈希通常比 CRC-32 更快,并产生更多类似于慢速加密哈希(MD5、SHA)的“随机”输出。尽管如此,我只看到 CRC-32 或 MD5 被推荐用于数据完整性/校验和目的。

在下表中,我测试了 32 位校验和/CRC/哈希函数,以确定它们检测数据中微小差异的能力:

桌子

每个单元格中的结果意味着:A) 发现的冲突次数,以及 B) 32 个输出位中的任何一个设置为 1 的最小和最大概率。要通过测试 B,最大值和最小值应尽可能接近 50 . 任何低于 45 或高于 55 的东西都表明存在偏见。


查看表格,MurmurHash3 和Jenkins lookup2与 CRC-32(实际上未通过一项测试)相比要好得多。它们也分布良好。DJB2 和 FNV1a 通过了碰撞测试,但分布不佳。Fletcher32 和 Adler32 在 NullBytes 和 8RandBytes 测试中挣扎。

那么我的问题是,与其他校验和相比,“非加密哈希”有多适合检测文件中的错误或差异?CRC-32/Adler-32/CRC-64 是否有任何理由可能胜过任何体面的 32 位/64 位哈希?

hash checksum crc error-detection data-integrity

6
推荐指数
1
解决办法
787
查看次数

找出 RS232 数据的 CRC 或 CHECKSUM

我需要与 RS232 设备通信,我没有可用的规格或信息。

我发送一个 16 字节的命令并返回一个 16 字节的结果。最后一个字节看起来像某种 crc 或校验和,我试过使用这个http://miscel.dk/MiscEl/miscelCRCandChecksum.html没有运气。

任何人都可以对 crc/校验和算法进行逆向工程?以下是使用 RS-232 监控程序捕获的一些数据:

01 80 42 00 00 00 00 00 00 00 00 00 00 00 01 B3
01 80 42 00 00 00 00 00 00 00 00 00 00 00 02 51
01 80 42 00 00 00 00 00 00 00 00 00 00 00 03 0F
01 80 42 00 00 00 00 00 00 00 00 00 00 00 04 8C …
Run Code Online (Sandbox Code Playgroud)

checksum serial-port reverse-engineering crc

5
推荐指数
1
解决办法
7994
查看次数

如何确定使用哪种CRC?

如果我有一定数量的字节要串行传输,我如何确定使用哪个CRC(CRC8,CRC16等,基本上是多少位CRC?)并且仍然有高错误检测百分比?有这个公式吗?

crc

5
推荐指数
2
解决办法
2888
查看次数

将CRC值保存在文件中,而不更改实际的CRC校验和?

我将从我自己的类中定义的一些对象保存到File.(保存流数据).

这一切都很好,但我希望能够在File中存储该文件的CRC校验和.

然后,每当我的应用程序尝试打开文件时,它都可以读取内部存储的CRC值.

然后检查实际文件,如果文件的CRC与内部存储的CRC值匹配,我可以正常处理文件,否则显示错误消息,说文件无效.

我需要一些关于如何做到这一点的建议,我想我可以这样做:

  • 从我的应用程序中保存文件.
  • 计算保存文件的CRC.
  • 编辑存储CRC值的已保存文件.
  • 每当打开文件时,检查CRC是否与内部CRC值匹配.

问题是,只要在文件中更改了单个数据字节,就会导致CRC校验和完全不同 - 正如预期的那样.

delphi crc

5
推荐指数
3
解决办法
3585
查看次数

CRC16 ISO 13239实施

我正在尝试在C#中实现Crc16.我已经尝试过很多不同的实现,但是大多数都给了我不同的值.以下是我已经使用过的一些代码.

    private static int POLYNOMIAL = 0x8408;
    private static int PRESET_VALUE = 0xFFFF;

    public static int crc16(byte[] data)
    {
        int current_crc_value = PRESET_VALUE;
        for (int i = 0; i < data.Length; i++)
        {
            current_crc_value ^= data[i] & 0xFF;
            for (int j = 0; j < 8; j++)
            {
                if ((current_crc_value & 1) != 0)
                {
                    current_crc_value = (current_crc_value >> 1) ^ POLYNOMIAL;
                }
                else
                {
                    current_crc_value = current_crc_value >> 1;
                }
            }
        }
        current_crc_value = ~current_crc_value;

        return current_crc_value & 0xFFFF; …
Run Code Online (Sandbox Code Playgroud)

c# crc crc16

5
推荐指数
1
解决办法
2万
查看次数