使用Magic Number校验文件格式
如何使用Magic Number判断文件格式
在很多方案设计中,会使用文件的后缀名来判断文件的格式。然而,文件后缀名可以被用户更改,因此使用后缀名判断文件格式并不准确。但是我们有时会发现,即便将图片的文件后缀名修改,很多图片查看的软件依然可以正确识别文件格式。那么这些软件是如何确认文件格式的呢?答案是Magic Number(魔法数)。
Magic Number是什么
Magic Number是二进制文件开始的若干个字节,通常为从第0个字节开始的4个字节,也称为File signature(文件签名)。根据行业标准,Magic Number在相同文件格式中是相同的。有些文件的Magic Number有大小端的区分,需要特别注意。
常见的Magic Number
文件格式 | 16进制Magic Number | 开始字节偏移 | 说明 |
rpm | ED AB EE DB | 0 | 红帽软件包格式 |
gif | 47 49 46 38 37 61 47 49 46 38 39 61 | 0 | GIF图片格式 |
jpg | FF 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 | 0 | JPEG RAW格式 |
exe scr sys dll fon cpl iec ime rs tsp mz | 4D 5A | 0 | Windows可执行文件 |
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) | 0 | zip压缩文件格式 |
png | 89 50 4E 47 0D 0A 1A 0A | 0 | png图片格式 |
mp3 | FF FB FF F3 FF F2 | 0 | mp3音乐格式 |
doc xls ppt msi msg | D0 CF 11 E0 A1 B1 1A E1 | 0 | Microsoft COM容器格式 |
更多Magic Number例子参考维基百科页面。
其他文件格式校验方式
Magic Number校验文件格式也不是完全保险,因为文件中的内容都可以人为指定。因此还有一些其他方案可以校验文件格式。例如:MIME types、Mac OS X uniform type identifiers (UTIs)、File header等。