文件类型检测器

文件的扩展名只是一个标签 —— 把 virus.exe 改名为 photo.jpg,文件内部不会有任何改变。本页读取每个上传文件的开头字节,与 60 多个真实的魔数签名比对:图像、文档、压缩包、音频/视频、字体、可执行文件、数据库和密钥文件。你会得到检测出的类型、MIME 类型、该格式常用的扩展名、扩展名与内容矛盾时的警告,以及格式自带的元数据(图像尺寸、PDF 版本、MP4 brand)。所有检查都在浏览器本地完成。
把文件拖到这里,或点击选择文件
可以只选一个也可以选多个。每个文件只读取开头 512 字节;文件绝不会离开这台电脑。
未选择文件。
选择文件并点击“检测类型”后,检测结果表会显示在这里。
“匹配”的含义:一致 —— 扩展名与检测到的格式相符;不匹配 —— 内容与扩展名声称的格式不同(被改名的文件,或更糟的情况);“无签名” —— 开头字节不匹配任何已知签名,这对纯文本、CSV 和大多数没有文件头的普通数据格式来说很正常。隐私:文件用浏览器自带的 FileReader 读取;不会上传任何内容。

什么是文件签名?

几乎每种二进制格式都以一段固定的字节序列开头 —— 即魔数 —— 程序靠它识别自己的文件,而不必信任文件名。PNG 总是以八个字节 89 50 4E 47 0D 0A 1A 0A(“\x89PNG\r\n\x1a\n”)开头,PDF 以 ASCII 文本 %PDF 开头,ZIP 以 PK\x03\x04 开头(PK 是该格式设计者 Phil Katz 的首字母缩写)。操作系统大多忽略这些字节而只看扩展名 —— 这正是改名后的文件“根本打不开”的原因,也是安全工具要嗅探内容的原因。

著名的开头字节

字节格式说明
89 50 4E 47 0D 0A 1A 0APNG 图像\r\n 用于防止换行符被破坏
FF D8 FFJPEG 图像每个 JPEG 帧都以 SOI 标记开头
25 50 44 46 2DPDF 文档“%PDF-1.7” —— 后面跟着版本号
50 4B 03 04ZIP 压缩包docx/xlsx/odt/epub 都是披着扩展名外衣的 ZIP
D0 CF 11 E0旧版 Officedoc/xls/ppt/msi —— OLE2 复合文件
4D 5AWindows EXE“MZ”,来自微软的 Mark Zbikowski
7F 45 4C 46Linux ELF\x7fELF —— 程序与共享库
1A 45 DF A3Matroska/WebMEBML 容器开头
75 73 74 61 72 偏移 257 处TAR 压缩包签名藏在文件头深处

检测器如何判定

每个文件的开头 512 字节会按特异度顺序与签名表比对:容器 brand(RIFF…WAVE 与 RIFF…AVI、RIFF…WEBP 之分,偏移 8 处的 ISO brand box)先于其通用容器检查,基于 ZIP 的格式(EPUB、ODF、OOXML)先于普通 ZIP。格式自带自描述元数据时,本页还会再挖一层:PNG/GIF/BMP/JPEG/WebP 的尺寸从头部件段读取,PDF 版本取自第 5 字节,MP4 brand 与 Java class 版本取自各自的标准偏移。什么都匹配不上的文件会先经过文本启发式检查(BOM、<?xml、<html、shebang、可打印字符比例),然后才被判定为未知。

常见误解

“它说是 ZIP 但文件是 .docx” —— 这是对的:.docx 就是一个首条目为 [Content_Types].xml 的 ZIP 压缩包;检测器能识别这种情况并明确报告为 Office Open XML。“它说无签名但文件能正常打开” —— CSV、大多数源代码和无数科学数据格式根本没有魔数字节;“无签名”不是指控。“它能告诉我文件是否安全吗?” —— 不能。内容嗅探只说明文件是什么,不说明它做什么;EXE 无论是安装程序还是恶意软件,都是 EXE。

常见问题

为什么只读 512 字节? —— 所有受支持的签名都在前 512 字节内(最深的是偏移 257 处 TAR 的 ustar);读更多只会白白拖慢大批量检测。
能检测视频时长吗? —— 不能,只能检测容器及其 brand;时长需要解析整个索引,那是播放器的工作。
能一次检测多个文件吗? —— 可以,一次拖入整批文件即可;每行独立检测。
相关页面:反方向(扩展名 → MIME 类型)请用MIME 类型查询;要对同样的文件计算哈希请用批量文件哈希与清单验证器。