通过 CRC16 确定错误偏移字节

发布于 2024-10-24 18:44:26 字数 170 浏览 5 评论 0原文

是否可以确定 CRC16 计算中发生更改的一个或多个字节?

例如,假设我得到一个 780 字节的配置文件,其中末尾包含 CRC16 作为两个字节值(因此 CRC16 是根据前 778 字节计算的)。当我计算文件内容的CRC16(最后不包括CRC16的778字节)并且它不同时,我可以确定发生错误的字节偏移量吗?

Is it possible to determine the byte, or bytes, that have changed from a CRC16 calculation?

For example, say I get a config file that is 780 bytes that includes the CRC16 as a two byte value at the end (so the CRC16 is calculated based on the first 778 bytes). When I calculate the CRC16 for the file contents (the 778 bytes that do not include the CRC16 at the end) and it is different, can I determine the byte offset the error occurred at?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一绘本一梦想 2024-10-31 18:44:26

仅使用 CRC16 的两次计算,不会。

CRC16 只是一个校验和:它可以告诉你存在差异,但不能告诉你差异在哪里。

Using just the two computations of the CRC16, no.

CRC16 is just a checksum: it can tell you that there is a difference, but not where.

最美的太阳 2024-10-31 18:44:26

简短的回答是否定的,你不能。

要理解为什么,您必须了解 CRC 的计算方式以及数学上称为散列运算的原理。这意味着无法根据生成的哈希码(在本例中为 CRC)可靠地重建输出。

有一些统计分析方法可以让您根据某些特定的输入测试用例推断有关原始文本的一些信息,但在大多数情况下,对于天真的观察者来说,并不能直接从 CRC 映射回原始文本。因此,除非原始文本是以某种方式构建的,否则在大多数情况下无法知道数据更改的偏移量。

The short answer is NO, you can't.

To understand why you have to understand how the CRC is computed and that mathematically that is called a hashing operation. What it means is the the output can not be reconstructed reliably from the generated hash code (in this case the CRC).

There are statistical analysis methods that may allow you to infer some information about the original text based on certain specific input test cases but in the majority of cases, and to a naive observer there's not direct mapping back to the original text from the CRC. So unless the original text was constructed in a certain way there's no way to know the offset at which data was changed in most cases.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文