短于 poly 宽度的输入数据的 CRC
CRC of input data shorter than poly width
我正在研究用 VBA 在 Excel 中实现 CRC,期间正在写一篇论文。
我创建了一个相当简单的模块化算法,它使用 Ross 的 parametrized model。
它适用于任何长度的多项式和除一个参数之外的任何参数组合;当输入数据的长度小于多项式 和 的宽度时,选择初始值 ("INIT"),其中任何位设置为 "past"输入数据的长度。
示例:
Input Data: 0x4C
Poly: 0x1021
Xorout: 0x0000
Refin: False
Refout: False
如果我选择无 INIT 或任何类似 0x##00 的 INIT,我将获得与任何在线 CRC 生成器相同的校验和。如果设置了最后两个十六进制字符的任何一位——比如 0x0001——我的结果无效。
我认为问题归结为 "How is the register initialized if only one byte of input data is present for a two byte INIT parameter?"
原来我被误导了(或者我很可能误解了)sunshine2k网站上关于如何使用INIT参数的解释。
INIT 值不得与第一个 n 输入字节本身进行异或运算(n 是寄存器的宽度/裁剪多边形/校验和),但只能在将 n 0 位附加到输入数据后进行异或运算。
当输入数据等于或大于 n 字节时,此规范无关紧要,但当输入数据太短时,此规范很重要。
我正在研究用 VBA 在 Excel 中实现 CRC,期间正在写一篇论文。 我创建了一个相当简单的模块化算法,它使用 Ross 的 parametrized model。 它适用于任何长度的多项式和除一个参数之外的任何参数组合;当输入数据的长度小于多项式 和 的宽度时,选择初始值 ("INIT"),其中任何位设置为 "past"输入数据的长度。
示例:
Input Data: 0x4C
Poly: 0x1021
Xorout: 0x0000
Refin: False
Refout: False
如果我选择无 INIT 或任何类似 0x##00 的 INIT,我将获得与任何在线 CRC 生成器相同的校验和。如果设置了最后两个十六进制字符的任何一位——比如 0x0001——我的结果无效。
我认为问题归结为 "How is the register initialized if only one byte of input data is present for a two byte INIT parameter?"
原来我被误导了(或者我很可能误解了)sunshine2k网站上关于如何使用INIT参数的解释。 INIT 值不得与第一个 n 输入字节本身进行异或运算(n 是寄存器的宽度/裁剪多边形/校验和),但只能在将 n 0 位附加到输入数据后进行异或运算。 当输入数据等于或大于 n 字节时,此规范无关紧要,但当输入数据太短时,此规范很重要。