PDF 和 DOCX 幻数

问题描述 投票:0回答:3

我读取第一个字节来区分文件类型,但 PDF 和 DOCX 都有一个“0x50”幻数。我该如何处理这种情况?

pdf upload byte docx magic-numbers
3个回答
7
投票

PDF 文件没有以“神奇”字节开头。如果您阅读 PDF 规范,您会发现它们必须以“%PDF”开头,但实际上许多 PDF 文件并非如此。

  1. 仅寻找 %PDF 标头来识别 PDF 文件是非常不可靠的,有效的 PDF 文件是您可以解析的文件(至少有预告片、交叉引用表等)。

  2. 曾经有人建议 PDF 文件在 %PDF 标头之前包含二进制数据,以确保它们被视为二进制文件。结果,PDF 阅读器一度开始在 %PDF 标头之前接受一定数量的二进制字节(随机字节)。此类文件无法通过简单的幻数或幻数字符串来检测。


2
投票

这很奇怪,因为我看到 PDF 文件为 0x25,DOCX 文件为 0x50 ...(源 1 源 2)。 但是,当您以文本模式、ISO 8859-1 编码打开这些文件时,您仍然可以看到 DOCX 文档以“PK”开头,而 PDF 文档以“%PDF”开头。


-1
投票

PDF 似乎有多个签名。某些类型的 PDF 以这 8 个字节结尾

0A 0D 0A 30 0D 0A 0D 0A

© www.soinside.com 2019 - 2024. All rights reserved.