我无法重新计算CD-ROM扇区的CRC32校验和

时间:2018-02-16 03:48:53

标签: checksum crc32 sector cd-rom

我使用十六进制编辑器从cd-rom bin文件中提取了一个扇区。 根据cd-rom规范,该部门应具有以下格式: * 16字节用于同步和标头 *子标头的8个字节 * 2048字节用于用户数据 * EDC的4个字节恰好是应用于用户数据和子报头的CRC32。

我在以下文档的第55页上找到了有关此问题的详细信息:https://ia800408.us.archive.org/4/items/cdi_may94_r2/cdi_may94_r2.pdf

我想手动修改扇区中的用户数据,但为了做到这一点,我还必须重新计算EDC。 (我假设如果EDC结果为正,则忽略ECC)

然而,在修改任何内容之前,我想检查我是否同意我在给定CRC32上的扇区。但是,我不能。这就是问题所在。

这是我的2352字节扇区: https://drive.google.com/open?id=1CYAInG8TYMyRMOgR1zeooUrLK5CR7cmM

EDC部分具有以下CRC32结果:92 54 48 44(十六进制)

但是当我使用HxD十六进制编辑器重新计算CRC32时,我得到:55 32 CA 62

为什么我会得到不同的结果? 我尝试在自定义CRC32部分中更改输入/输出反射,但没有任何作用。我已经坚持了一个小时而无法在Google上找到任何内容。

1 个答案:

答案 0 :(得分:0)

我要回答自己的问题,因为我终于找到了答案:
CRC32使用了不同的多项式。

典型的正向/反向值为:0x04C11DB7 / 0xEDB88320
我的cd-rom使用的正向/反向值:0x8001801B / 0xD8018001

因此,如果您想在HxD十六进制编辑器中手动重新计算CRC32,则可以 需要使用具有以下设置的手动CRC:

*多项式:0x8001801B
*初始值:0
*输出XOR:0
*输入和输入检查输出反射。

虽然CDmage可以自动完成所有这些操作。

最后所有这些对我没有帮助,因为模拟器没有在EDC / ECC字节上提供飞行金鱼。我应该知道的。

稍微更改了我的扇区中的一些文本相关字节后,我注意到磁盘映像不能再加载,因此,立即假设EDC / ECC字节负责。真正的原因可能在于某处的软件。