toolfree

文件签章检查

在你的浏览器里读取文件开头的字节,判断它真正的格式,而不是副档名宣称的格式。附完整的 magic number 对照表。

在你的浏览器中运行

或把文件拖进来

文件签名对照表

格式签名扩展名MIME 类型
PNG89 50 4E 47 0D 0A 1A 0A.pngimage/png
JPEGFF D8 FF.jpg .jpegimage/jpeg
GIF (87a)47 49 46 38 37 61.gifimage/gif
GIF (89a)47 49 46 38 39 61.gifimage/gif
BMP42 4D.bmpimage/bmp
WebP52 49 46 46 · 8: 57 45 42 50.webpimage/webp
TIFF (little-endian)49 49 2A 00.tif .tiffimage/tiff
TIFF (big-endian)4D 4D 00 2A.tif .tiffimage/tiff
Photoshop38 42 50 53.psdimage/vnd.adobe.photoshop
Windows icon00 00 01 00.icoimage/x-icon
Windows cursor00 00 02 00.curimage/x-icon
HEIC4: 66 74 79 70 · 8: 68 65 69 63.heicimage/heic
AVIF4: 66 74 79 70 · 8: 61 76 69 66.avifimage/avif
SVG3C 3F 78 6D 6C.svgimage/svg+xml
WAV52 49 46 46 · 8: 57 41 56 45.wavaudio/wav
AVI52 49 46 46 · 8: 41 56 49 20.avivideo/x-msvideo
MP3 with ID3 tag49 44 33.mp3audio/mpeg
FLAC66 4C 61 43.flacaudio/flac
Ogg容器4F 67 67 53.ogg .oga .opusapplication/ogg
MP4容器4: 66 74 79 70.mp4 .m4a .m4vvideo/mp4
Matroska / WebM容器1A 45 DF A3.mkv .webmvideo/x-matroska
PDF25 50 44 46 2D.pdfapplication/pdf
RTF7B 5C 72 74 66.rtfapplication/rtf
Legacy Office (.doc, .xls, .ppt)容器D0 CF 11 E0 A1 B1 1A E1.doc .xls .ppt .msiapplication/x-ole-storage
PostScript25 21.ps .epsapplication/postscript
ZIP (and .docx, .xlsx, .jar, .apk, .epub, .odt)容器50 4B 03 04.zip .docx .xlsx .pptx .jar .apk .epub .odtapplication/zip
ZIP (empty archive)50 4B 05 06.zipapplication/zip
gzip容器1F 8B.gz .tgzapplication/gzip
bzip242 5A 68.bz2application/x-bzip2
xzFD 37 7A 58 5A 00.xzapplication/x-xz
Zstandard28 B5 2F FD.zstapplication/zstd
7-Zip37 7A BC AF 27 1C.7zapplication/x-7z-compressed
RAR (1.5–4.x)52 61 72 21 1A 07 00.rarapplication/vnd.rar
RAR (5.0+)52 61 72 21 1A 07 01 00.rarapplication/vnd.rar
tar (POSIX)容器257: 75 73 74 61 72.tarapplication/x-tar
Debian package / ar archive容器21 3C 61 72 63 68 3E.deb .aapplication/vnd.debian.binary-package
ELF (Linux executable)7F 45 4C 46application/x-elf
DOS / Windows executable4D 5A.exe .dllapplication/vnd.microsoft.portable-executable
Mach-O 64-bitCF FA ED FEapplication/x-mach-binary
Java class — or a Mach-O universal binaryCA FE BA BE.classapplication/java-vm
WebAssembly00 61 73 6D.wasmapplication/wasm
Script with a shebang23 21.sh .py .pltext/x-shellscript
SQLite database53 51 4C 69 74 65 20 66 6F 72 6D 61 74 20 33 00.sqlite .dbapplication/vnd.sqlite3
WOFF font77 4F 46 46.wofffont/woff
WOFF2 font77 4F 46 32.woff2font/woff2
OpenType font4F 54 54 4F.otffont/otf
TrueType font00 01 00 00 00.ttffont/ttf
Text with a UTF-8 byte order markEF BB BF.txttext/plain
Text with a UTF-16 LE byte order markFF FE.txttext/plain
Text with a UTF-16 BE byte order markFE FF.txttext/plain

只读取开头 512 个字节,而且是在你的浏览器里读的。没有任何东西被上传。

副档名是说法,字节才是证据

档名结尾是 .jpg,只说明了有人决定这样叫它,完全没有说里面是什么。开头那几个字节通常会说: 大多数二进位格式的开头都是一段固定的样式,也就是 magic number,放在那里的用意正是让程序 不必相信档名就能认出文件。

把文件拖到上面,这个页面会读开头 512 个字节,告诉你它们说了什么。它不会多读,也不会把任何东西 送出去——这正是重点,因为你会想查一个文件的类型,通常就是因为你不信任它。

不一致代表什么,不代表什么

副档名与字节不一致时,页面会直说。无害的常见原因:

比较不无害的原因:披着图片副档名的脚本或执行档,或者刻意做成同时是两种合法格式的 polyglot 文件。 不一致是「值得看一下」的理由,不是判决。

而相符能证明的,比看起来少得多。 magic number 就只是开头那几个字节。一个文件可以用 %PDF- 开头,而其余几乎全是别的东西。签章检查是一道快速的筛子,不是验证器。

最容易搞错的几个情况

PK 不等于「一个 ZIP 档」

50 4B 03 04——PK 加两个控制字节,取自 Phil Katz——是每一个 ZIP 压缩包的开头。它同时也是 每一个 .docx.xlsx.pptx.odt.jar.apk.epub 的开头,因为这些本来就是 ZIP,只是内部有约定好的结构。再怎么读开头的字节都分不出来,只能把压缩包打开看里面有什么。

RIFFftyp 要看第二段

有些格式先放一个通用的容器标记,真正的格式在后面几个字节:

位移 0位移 8格式
RIFFWEBPWebP
RIFFWAVEWAV
RIFFAVI AVI

ISO base media 也一样:ftyp 在位移 4,品牌代码在 8——所以 MP4、MOV、HEIC、AVIF 的前四个 字节完全相同。任何「一个格式一个样式」的对照表在这里都会出错。

CA FE BA BE 是两种东西

它是 Java .class 档的 magic number,1991 年选它是因为那是一个念得出来的十六进位单字。它同时 也是 macOS 上 Mach-O universal binary 的 magic number。两个都对;只挑一个讲的工具是在猜。

tar 的签章在第 257 个字节

ustar 出现在位移 257,不在开头,因为 tar 比「把头部放在文件最前面」这个惯例还早。只读前十六个 字节的话,每一个 tar 档都会认不出来。

根本没有签章的格式

纯文字、CSV、JSON、HTML、JavaScript、Markdown、大部分原始码——一个都没有,因为它们从来不是设计成 让机器读四个字节就认出来的。页面说「没有已知的文件签章」时,那往往是正确答案,不是失败。

例外是 byte order mark:文字档开头的 EF BB BF 是 UTF-8 BOM,也是 CSV 偶尔在第一格多出  的原因。

相关

全部在你的浏览器里完成。若要验证文件的内容而不是类型, 杂凑产生器用同样的方式做指纹。