Pull to refresh

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

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

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

image
image

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

Я реализовал на js небольшую библиотеку, которая может определить формат файла на стороне клиента (пока поддерживаются только jpg, png, gif, pdf).
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.