Магические числа или как определить формат файла

в 13:13, , рубрики: Песочница, метки: , ,

Привет. У меня появилась задача определить формат файла. На первый взгляд, все довольно тривиально: взял расширение, вот тебе и формат файла. Я согласен, что в большинстве случаев это сработает. Но расширение файла не всегда указано (так было у меня), и его очень легко подделать. Получается задача: определить формат файла по его содержимому.

Блуждая по просторам интернета, я наткнулся на статью, где говорилось о “magic number”. Магическое число – это постоянное числовое или текстовое значение, используемое для идентификации формата файла. Действительно, если открыть в hex-редакторе несколько png файлов, то можно заметить, что первые несколько байт у них совпадают.

image
image

Также можно открыть pdf файлы и убедится, что первые несколько байт у них совпадают.
image
image
Список таких «магических чисел» есть в википедии.

Я реализовал на js небольшую библиотеку, которая может определить формат файла на стороне клиента (пока поддерживаются только jpg, png, gif, pdf).


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js