文件类型检测器
文件的扩展名只是一个标签 —— 把 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 0A | PNG 图像 | \r\n 用于防止换行符被破坏 |
FF D8 FF | JPEG 图像 | 每个 JPEG 帧都以 SOI 标记开头 |
25 50 44 46 2D | PDF 文档 | “%PDF-1.7” —— 后面跟着版本号 |
50 4B 03 04 | ZIP 压缩包 | docx/xlsx/odt/epub 都是披着扩展名外衣的 ZIP |
D0 CF 11 E0 | 旧版 Office | doc/xls/ppt/msi —— OLE2 复合文件 |
4D 5A | Windows EXE | “MZ”,来自微软的 Mark Zbikowski |
7F 45 4C 46 | Linux ELF | \x7fELF —— 程序与共享库 |
1A 45 DF A3 | Matroska/WebM | EBML 容器开头 |
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 类型查询;要对同样的文件计算哈希请用批量文件哈希与清单验证器。
自测