Определение типа файла по его содержимому (сигнатуре)
- by NMitin
Создание простой программы на java для определения типа файла по сигнатуре. Обычно, для определения типа достаточно знать не более 20 байт и плюс их смещение от начала файла. Эти данные я поместил в текстовый файл FileTypes.txt, чтобы была возможность добавлять и изменять их. Поля разделены символом ; .
<pre>
//Расширение;Смещение;Размер байт;Признак доп. обработки;Регулярное выражение;Иконка;Описание типа
MDB;0;19;0;000100005374616E64617264204A6574204442;db.png;Microsoft Access file
ASF, WMA, WMV;0;16;0;3026B2758E66CF11A6D900AA0062CE6C;video.png;Microsoft Windows Media Audio/Video File
LNK;0;16;0;4C0000000114020000000000C0000000;link.png;Ярлык (ссылка на файл) Windows
AVI;0;16;0;52494646.{5,8}415649204C495354;video.png;Resource Interchange File Format — Windows Audio Video Interleave file, where 5-8 bytes is the file size (little endian)
ZIP;0;14;0;504B030414000100630000000000;zip.png;ZLock Pro encrypted ZIP
M4V;0;12;0;00000018667479706D703432;video.png;MPEG-4 video/QuickTime file
SDOC, SXLS;0;10;0;4F7261636C652049524D;irm.png;Oracle IRM Desktop
DOCX, PPTX, XLSX;0;8;9999;504B030414000600;office.png;Microsoft Office Open XML Format (OOXML) Document
MP4;4;8;0;6674797069736F6D;video.png;ISO Base Media file (MPEG-4) v1
PPT;0;8;512;006E1EF0;ppt.png;PowerPoint presentation subheader (MS Office)
DOC, DOT, PPS, PPT, XLA, XLS, MSI, WIZ;0;8;0;D0CF11E0A1B11AE1;office.png;Microsoft Office 97-2003 applications (Word, Powerpoint, Excel, Wizard).[See also Word, Powerpoint, and Excel «subheaders» at byte offset 512. There appear to several subheader formats and a dearth of documentation. There have been reports that there are different subheaders for Windows and Mac versions of MS Office but I cannot confirm that.]
OPT,XLS;512;8;0;8;xls.png;Developer Studio File Workspace Options subheader (MS Office), Excel spreadsheet subheader (MS Office)
XLS;512;8;0;0908100000060500;xls.png;Excel spreadsheet subheader (MS Office)
PNG;0;8;0;89504E470D0A1A0A;img.png;Portable Network Graphics file
RAR;0;8;0;526172211A070100;rar.png;RAR (v5.x) compressed archive file
DjVu;0;8;0;41542654464F524D;djvu.png;DjVu (от фр. déjà vu — «уже виденное») — технология сжатия изображений с потерями, разработанная специально для хранения сканированных документов — книг, журналов, рукописей и прочее, где обилие формул, схем, рисунков и рукописных символов делает чрезвычайно трудоёмким их полноценное распознавание.
EPUB;0;8;0;504B03040A000200;ebook.png;Open Publication Structure eBook file. (Should also include the string: mimetypeapplication/epub+zip)
JAR;0;8;0;504B030414000808;jar.png;Java archive
MHT;0;8;0;46726F6D3A203D3F;ie.png;Сохраненная web-страница MIME HTML
EXE, DLL, SYS;0;8;0;4D5A900003000000;exe.png;Исполняемый или системный файл Windows (драйвер,библиотека)
RAR;0;7;0;526172211A0700;rar.png;RAR — проприетарный формат сжатия данных и условно-бесплатная программа-архиватор. Версия для Microsoft Windows распространяется в составе многоформатного архиватора с графическим интерфейсом WinRAR.
7Z;0;6;0;377ABCAF271C;7z.png;Архив 7zip. 7-Zip — свободный файловый архиватор с высокой степенью сжатия данных. Поддерживает несколько алгоритмов сжатия и множество форматов данных, включая собственный формат 7z c высокоэффективным алгоритмом сжатия LZMA. Программа разрабатывается с 1999 года и является бесплатной, а также имеет открытый исходный код, большая часть которого свободно распространяется на условиях лицензии GNU LGPL, за исключением кода декомпрессора unRAR, который имеет ограничения.
RTF;0;6;0;7B5C72746631;Rich Text Format, RTF (англ. rich — богатый; «формат обогащённого текста») — проприетарный[3][4] межплатформенный формат хранения размеченных текстовых документов, предложенный группами программистов, основавшими компании Microsoft и Adobe, как мета-тэговый формат для редактора Word в 1982 году. С тех пор спецификация формата несколько раз изменялась. После разрыва отношений с Microsoft компания Adobe продолжила самостоятельное развитие метатэгового языка, заложенного в основу RTF, создав в 1985 году язык PostScript.
ISO;32769;5;0;4344303031;iso.png;ISO 9660 — стандарт, выпущенный Международной организацией по стандартизации, описывающий файловую систему для дисков CD-ROM. Также известен как CDFS (Compact Disc File System). Целью стандарта является обеспечить совместимость носителей под разными операционными системами, такими как Unix, Mac OS, Windows.
ISO;34817;5;0;4344303031;iso.png;ISO 9660 — стандарт, выпущенный Международной организацией по стандартизации, описывающий файловую систему для дисков CD-ROM. Также известен как CDFS (Compact Disc File System). Целью стандарта является обеспечить совместимость носителей под разными операционными системами, такими как Unix, Mac OS, Windows.
ISO;36865;5;0;4344303031;iso.png;ISO 9660 — стандарт, выпущенный Международной организацией по стандартизации, описывающий файловую систему для дисков CD-ROM. Также известен как CDFS (Compact Disc File System). Целью стандарта является обеспечить совместимость носителей под разными операционными системами, такими как Unix, Mac OS, Windows.
PDF, FDF;0;4;0;25504446;pdf.png;Adobe Portable Document Format and Forms Document file
JPG;0;4;0;FFD8FFE1;img.png;Digital camera JPG using Exchangeable Image File Format (EXIF)
JPG;0;4;0;FFD8FFE8;img.png;Still Picture Interchange File Format (SPIFF)
ICO,SPL;0;4;0;00000100;img.png;Windows icon file(ICO) OR Windows NT/2000/XP printer spool file(SPL)
JFIF, JPE, JPEG, JPG;0;4;0;img.png;FFD8FFE0;JPEG/JFIF graphics file
XLS;512;4;0;FDFFFFFF;xls.png;Excel spreadsheet subheader (MS Office)
ZIP;0;4;0;504B0304;zip.png;PKZIP archive fileZIP Apple Mac OS X Dashboard Widget, Aston Shell theme, Oolite eXpansion Pack, Opera Widget, Pivot Style Template, Rockbox Theme package, Simple Machines Forums theme, SubEthaEdit Mode, Trillian zipped skin, Virtual Skipper skin JAR Java archive; compressed file package for classes and data KMZ Google Earth saved working session file KWD KWord document ODT, ODP, OTT OpenDocument text document, presentation, and text document template, respectively. SXC, SXD, SXI, SXW OpenOffice spreadsheet (Calc), drawing (Draw), presentation (Impress), and word processing (Writer) files, respectively. SXC StarOffice spreadsheet WMZ Windows Media compressed skin file XPI Mozilla Browser Archive XPS XML paper specification file XPT eXact Packager Models
MP4, MOV, M4V, M4A, 3GG, 3GP, 3G2;4;4;0;66747970|000001B[0-9A-F];video.png;Audio/Video files
MP3, KOZ;0;3;0;494433;audio.png;MPEG-1 Audio Layer 3 (MP3) audio file OR Sprint Music Store audio file (for mobile devices)
COM, DLL, DRV, EXE, PIF, QTS, QTX, SYS,…;0;2;0;4D5A;exe.png;Windows/DOS executable file (See The MZ EXE File Format page for the structure of an EXE file, with coverage of NE, TLINK, PE, self-extracting archives, and more.)
COM, SYS;0;1;0;E8|E9|EB;exe.png;Windows executable file
</pre>
Признак дополнительной обработки нужен для… ну да, для дополнительной обработки :). Пример «DOCX, PPTX, XLSX» , сигнатура этих файлов одинакова, это OOXML в zip-архиве, а для того чтобы определить тип точнее, нужно вытащить из архива файл [Content_Types].xml и найти в нем строчку «
Создание простой программы на java для определения типа файла по сигнатуре. Обычно, для определения типа достаточно знать не более 20 байт и плюс их смещение от начала файла. Эти данные я поместил в текстовый файл FileTypes.txt, чтобы была возможность добавлять и изменять их. Поля разделены символом ; . <pre> //Расширение;Смещение;Размер байт;Признак доп. обработки;Регулярное выражение;Иконка;Описание типа…