gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:02:56 26 4
gpt4 key购买 nike

我正在将一些从我自己的类中定义的对象保存到文件中。 (保存流数据)。

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

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

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

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

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

问题是,一旦文件中的单个数据字节发生更改,就会导致 CRC 校验和与预期完全不同。

最佳答案

我通常更喜欢将 CRC 排除在检查之外的方法。但如果由于某种原因无法做到这一点,有一个解决方法:

需要预留8个字节,其中4个字节用于CRC,4个字节用于补偿数据。首先用特定的虚拟值(例如0x00)填充保留字节。然后计算前 4 个字节的 CRC,最后更改其他 4 个字节,使文件的 CRC 保持不变。

有关如何执行此计算的详细信息:Reversing CRC32

<小时/>

我实际上在 one of my projects 中使用过这个:

我正在设计一种基于 zip 的文件格式。存档中的第一个文件未压缩存储并用作头文件。这也意味着它存储在文件中的固定偏移处。到目前为止相当标准,类似于 ePub。

现在我决定在 header 中包含 sha1 哈希,为每个文件提供一个基于内容的唯一 ID 并进行完整性检查。由于 header 和 sha1 哈希值位于文件中已知的偏移量,因此在哈希值很简单时将其屏蔽。因此,我输入一个虚拟哈希并创建 zip 文件,然后对文件进行哈希并填写真实哈希。

但是现在有一个问题:Zip 存储了所有包含的文件的 CRC。不仅在 sha1 散列时很容易屏蔽的一个地方,而且在文件末尾附近具有可变偏移量的第二个地方。所以我决定采用 CRC 伪造,这样我就得到了强哈希,并且 zip 得到了有效的 CRC32。

由于我已经为最终文件伪造了 CRC,所以我决定为原始头文件伪造它也不会造成伤害。因此,这种格式的所有文件现在都以具有 CRC 0xD1CE0DD5 的头文件开头。

关于delphi - 将 CRC 值保存在文件中,而不更改实际的 CRC 校验和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8608219/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com