【发布时间】:2015-12-28 12:15:50
【问题描述】:
我从Wikipedia知道CRC计算算法。关于我阅读here 的RAR 文件的结构。比如有这样写:
文件的幻数为:
0x 52 61 72 21 1A 07 00以下是描述存档标头的细分:
0x6152 - HEAD_CRC 0x72 - HEAD_TYPE 0x1A21 - HEAD_FLAGS 0x0007 - HEAD_SIZE
如果我理解正确,HEAD_CRC (0x6152) 是标记块 (MARK_HEAD) 的 CRC 值。我在某处读到,WinRAR 文件的 CRC 是使用标准多项式 0xEDB88320 计算的,但是当 CRC 的大小小于 4 个字节时,有必要使用不太重要的字节。在这种情况下(当然,如果我理解正确的话)CRC 值为 0x6152,所以它有 2 个字节。现在我不知道,我必须将哪些字节不那么重要。从标准多项式(0xEDB88320)?那么 0x8320 可能是这个多项式的不太重要的字节。接下来,如果我们已经有正确的多项式,如何计算标记块的CRC(即从以下字节:0x 52 61 72 21 1A 07 00)?
【问题讨论】:
-
您读到的关于 32 位标准多项式的“某处”在哪里?您确定两个来源都引用相同的 RAR 版本吗? forensicswiki 似乎使用 16 位 CRC 记录旧格式,而当前 RAR 5.0 archive format 使用具有 32 位 CRC 的不同文件结构。你看过RARLAB提供的解压器源码吗?
-
@BlackJack,我是 Pole,我在这个波兰语 site 上找到了关于这个多项式 0xEDB88320 的信息。我有 WinRAR 3.91,创建了示例存档并检查了该存档的前 7 个字节 - 实际上,字节具有以下值:0x 52 61 72 21 1A 07 00。现在我想计算这些值的 CRC。
-
我认为您不应该在这里计算 CRC。这是一个固定的字节序列,在前四个字节中用 ASCII 拼出
'Rar!',第五个字节值导致 DOS 和 Windows 在以文本模式打开时结束读取。使用这些值并巧合地在解释为 ASCII 字符时以拼写为“Ra”的 CRC 结尾是极不可能的。