读取文件头字节判断真实格式
这个工具通过读取文件开头固定的标识字节(业内称为 magic bytes)来判断文件的真实格式,不依赖文件名的扩展名——有些文件可能被故意改了后缀名,但内容本质没变,这种情况下用这个工具能识别出真实类型。所有检测完全在浏览器本地完成,只读取文件开头很少的字节,不会上传整个文件。
这个工具通过读取文件开头的 16 个字节,对照一份内置的「文件头标识」(业内常称 magic bytes)列表,判断这个文件实际上是什么格式,并同时显示文件名里的扩展名和这 16 个字节的十六进制内容。它的用处是:当一个文件的扩展名被改过、或者没有扩展名、或者你对来源不放心时,可以对照看看内容是否与扩展名相符。需要强调它的范围:内置识别的格式只有十几种,没有命中时只会说「无法识别」,并不代表文件有问题;它也不是杀毒软件,不能判断文件是否安全。
工具内置的识别规则包括:PNG 图片(开头 89 50 4E 47)、JPEG 图片(FF D8 FF)、GIF 图片(47 49 46 38)、PDF 文档(25 50 44 46,即 %PDF)、ZIP 压缩包(50 4B 03 04,同时也是 docx、xlsx、pptx 等新版 Office 文件的容器格式)、RAR 压缩包(52 61 72 21)、GZIP 压缩文件(1F 8B)、BMP 图片(42 4D,且保留字段为 0、DIB 头大小合法)、带 ID3 标签的 MP3 音频(49 44 33)、ISO 媒体容器(第 5 到第 8 字节为 ftyp,再按第 9 到 12 字节的品牌区分 MP4 视频、HEIC/HEIF 图片、AVIF 图片、MOV 视频、M4A 音频、3GP 视频)、7z 压缩包(37 7A BC AF 27 1C)、旧版 Office 文档(D0 CF 11 E0 A1 B1 1A E1),以及 WEBP 图片(RIFF 开头且第 9 到 12 字节为 WEBP)。如果是 RIFF 开头但不是 WEBP,会显示「RIFF 容器格式(可能是 WAV 音频或者 AVI 视频)」。以上规则就是工具的全部识别范围,不在其中的格式都会显示「无法识别」。
下面的结果是用工具中相同的匹配规则,对几组字节实际运行得到的。PNG 图片的标准开头 89 50 4E 47 0D 0A 1A 0A,识别为 PNG 图片。开头为 50 4B 03 04 的数据,识别为 ZIP 压缩包(也可能是 Office 新格式)。JSON 文本 {"a":1} 显示无法识别;老版 Word/Excel(.doc/.xls)的文件头 D0 CF 11 E0 A1 B1 1A E1 识别为旧版 Office 文档。以 BM 开头的文本(如「BMW notes」)不再被误判为 BMP;HEIC 文件头(ftyp + heic)识别为 HEIC/HEIF 图片。
不一定。有时是正常的:例如 .docx 文件的真实类型就是 ZIP 压缩包,因为 docx 本身是 ZIP 容器。也有的是下载或改名时出的错,或者工具自身的误判(见上面的 BMP、ftyp 系列)。不一致只是一个提示,不能作为文件是否安全的结论。
不可以。它只看文件头的几个字节。把恶意程序改名成 .jpg 能骗过只看扩展名的人,这个工具能提醒你文件头不是图片;但是反过来,文件头正常并不代表安全。检查可疑文件请使用杀毒软件和可信的扫描服务。
最常见的原因是它的格式不在内置的十几种规则里,比如文本、JSON、HTML 或 WebM。这是正常现象,不代表文件损坏。你可以对照十六进制内容,在公开的文件签名列表里查找。
检测在浏览器里完成,代码只读取文件开头的 16 个字节来匹配规则,并在页面上显示文件名、扩展名和这几个字节,页面中没有上传文件的网络请求,整个文件内容不会被读入页面,也不保存任何记录。刷新或关闭页面后,结果即清除。