使用Magic Number校验文件格式

如何使用Magic Number判断文件格式

在很多方案设计中,会使用文件的后缀名来判断文件的格式。然而,文件后缀名可以被用户更改,因此使用后缀名判断文件格式并不准确。但是我们有时会发现,即便将图片的文件后缀名修改,很多图片查看的软件依然可以正确识别文件格式。那么这些软件是如何确认文件格式的呢?答案是Magic Number(魔法数)。

Magic Number是什么

Magic Number是二进制文件开始的若干个字节,通常为从第0个字节开始的4个字节,也称为File signature(文件签名)。根据行业标准,Magic Number在相同文件格式中是相同的。有些文件的Magic Number有大小端的区分,需要特别注意。

常见的Magic Number

文件格式16进制Magic Number开始字节偏移说明
rpmED AB EE DB0红帽软件包格式
gif47 49 46 38 37 61
47 49 46 38 39 61
0GIF图片格式
jpgFF D8 FF DB
FF D8 FF E0 00 10 4A 46
49 46 00 01
FF D8 FF EE
FF D8 FF E1 ?? ?? 45 78
69 66 00 00
FF D8 FF E0
0JPEG RAW格式
exe
scr
sys
dll
fon
cpl
iec
ime
rs
tsp
mz
4D 5A0Windows可执行文件
zip
aar
apk
docx
epub
ipa
jar
kmz
maff
msix
odp
ods
odt
pk3
pk4
pptx
usdz
vsdx
xlsx
xpi
50 4B 03 04
50 4B 05 06 (empty archive)
50 4B 07 08 (spanned archive)
0zip压缩文件格式
png89 50 4E 47 0D 0A 1A 0A0png图片格式
mp3FF FB
FF F3
FF F2
0mp3音乐格式
doc
xls
ppt
msi
msg
D0 CF 11 E0 A1 B1 1A E10Microsoft COM容器格式

更多Magic Number例子参考维基百科页面

其他文件格式校验方式

Magic Number校验文件格式也不是完全保险,因为文件中的内容都可以人为指定。因此还有一些其他方案可以校验文件格式。例如:MIME types、Mac OS X uniform type identifiers (UTIs)、File header等。

留下评论