FreeToGenerate.com

Um ficheiro diz o que é nos primeiros bytes. Alguns formatos fixam-nos numa norma; outros nunca os escreveram. Nada é enviado.

Identificar um ficheiro

Largue um ficheiro aqui, ou escolha um.

Só se leem os primeiros bytes, e são lidos no seu navegador. O ficheiro não é enviado e não sai da sua máquina.

norma
15
informativo
1
doc. do fabricante
14
só convenção
3
33 / 33
PNGnorma.pngimage/png
89 50 4E 47 0D 0A 1A 0A·PNG····No byte 0 (o início)

Escrito em: ISO/IEC 15948 §5.2

A norma atual enuncia estes oito bytes e não diz porquê. A explicação — um primeiro byte não ASCII para apanhar uma transferência que limpe o bit alto, um CR-LF para apanhar a conversão de fins de linha, um control-Z para o MS-DOS não despejar o ficheiro e um fim de linha final para o problema inverso — sobrevive só no RFC informativo que a norma substituiu.

JPEGnorma.jpg .jpegimage/jpeg
FF D8 FF···No byte 0 (o início)

Escrito em: ITU-T T.81 §B.1 (SOI marker)

Só os primeiros bytes são fixos. O que se segue varia com o codificador, e é por isso que esta assinatura é mais curta do que a maioria.

GIF 87adoc. do fabricante.gifimage/gif
47 49 46 38 37 61GIF87aNo byte 0 (o início)

Escrito em: GIF 87a, Header block

Duas versões do formato partilham o prefixo, portanto a versão faz parte da assinatura em vez de ser lida a seguir.

GIF 89adoc. do fabricante.gifimage/gif
47 49 46 38 39 61GIF89aNo byte 0 (o início)

Escrito em: GIF 89a §17 (Header)

Duas versões do formato partilham o prefixo, portanto a versão faz parte da assinatura em vez de ser lida a seguir.

BMPdoc. do fabricante.bmp .dibimage/bmp
42 4DBMNo byte 0 (o início)

Escrito em: Microsoft BITMAPFILEHEADER (bfType)

WebPnorma.webpimage/webp
52 49 46 46RIFFNo byte 0 (o início)

Escrito em: RFC 9649 §2 (RIFF container)

RIFF é um contentor, não um formato. WebP, WAV e AVI são idênticos byte a byte aqui; os quatro bytes que os distinguem vêm depois.

TIFF (little-endian)doc. do fabricante.tif .tiffimage/tiff
49 49 2A 00II*·No byte 0 (o início)

Escrito em: TIFF 6.0 §2 (Image File Header)

TIFF (big-endian)doc. do fabricante.tif .tiffimage/tiff
4D 4D 00 2AMM·*No byte 0 (o início)

Escrito em: TIFF 6.0 §2 (Image File Header)

ICOsó convenção.icoimage/vnd.microsoft.icon
00 00 01 00····No byte 0 (o início)

Escrito em: nada normativo

Photoshopdoc. do fabricante.psdimage/vnd.adobe.photoshop
38 42 50 538BPSNo byte 0 (o início)

Escrito em: Adobe Photoshop File Formats, File Header

PDFnorma.pdfapplication/pdf
25 50 44 46 2D%PDF-No byte 0 (o início)

Escrito em: ISO 32000-2 §7.5.2 (File header)

A assinatura é texto legível e não binário, e por isso estes ficheiros costumam sobreviver a serem abertos num editor de texto.

RTFdoc. do fabricante.rtfapplication/rtf
7B 5C 72 74 66{\rtfNo byte 0 (o início)

Escrito em: Microsoft RTF Specification

A assinatura é texto legível e não binário, e por isso estes ficheiros costumam sobreviver a serem abertos num editor de texto.

ZIPdoc. do fabricante.zipapplication/zip
50 4B 03 04PK··No byte 0 (o início)

Escrito em: PKWARE APPNOTE §4.3.7 (local file header)

Um .docx, um .xlsx, um .jar, um .apk e um .epub são todos arquivos ZIP e todos levam estes bytes. Distingui-los obriga a abrir o arquivo e ver o que está lá dentro.

gzipnorma.gzapplication/gzip
1F 8B··No byte 0 (o início)

Escrito em: RFC 1952 §2.3.1 (ID1, ID2)

bzip2só convenção.bz2application/x-bzip2
42 5A 68BZhNo byte 0 (o início)

Escrito em: nada normativo

XZdoc. do fabricante.xzapplication/x-xz
FD 37 7A 58 5A 00·7zXZ·No byte 0 (o início)

Escrito em: The .xz File Format §2.1.1.1 (Header Magic Bytes)

7-Zipsó convenção.7zapplication/x-7z-compressed
37 7A BC AF 27 1C7z··'·No byte 0 (o início)

Escrito em: nada normativo

RAR 5doc. do fabricante.rarapplication/vnd.rar
52 61 72 21 1A 07 01 00Rar!····No byte 0 (o início)

Escrito em: RAR archive format documentation

tar (ustar)norma.tarapplication/x-tar
75 73 74 61 72ustarNo byte 257

Escrito em: POSIX.1-2017 (ustar Interchange Format)

Esta não começa no início do ficheiro, portanto tudo o que leia apenas os primeiros bytes falha-a por completo.

ISO 9660norma.isoapplication/x-iso9660-image
43 44 30 30 31CD001No byte 32769

Escrito em: ECMA-119 §8.4.1 (Standard Identifier)

Esta não começa no início do ficheiro, portanto tudo o que leia apenas os primeiros bytes falha-a por completo.

WAVdoc. do fabricante.wavaudio/vnd.wave
52 49 46 46RIFFNo byte 0 (o início)

Escrito em: RFC 2361 / Microsoft RIFF

RIFF é um contentor, não um formato. WebP, WAV e AVI são idênticos byte a byte aqui; os quatro bytes que os distinguem vêm depois.

AVIdoc. do fabricante.avivideo/vnd.avi
52 49 46 46RIFFNo byte 0 (o início)

Escrito em: Microsoft RIFF (AVI form)

RIFF é um contentor, não um formato. WebP, WAV e AVI são idênticos byte a byte aqui; os quatro bytes que os distinguem vêm depois.

MP4 / ISO base medianorma.mp4 .m4a .movvideo/mp4
66 74 79 70ftypNo byte 4

Escrito em: ISO/IEC 14496-12 §4.3 (File Type Box)

Esta não começa no início do ficheiro, portanto tudo o que leia apenas os primeiros bytes falha-a por completo.

Oggnorma.ogg .oga .ogvapplication/ogg
4F 67 67 53OggSNo byte 0 (o início)

Escrito em: RFC 3533 §6 (capture_pattern)

FLACnorma.flacaudio/flac
66 4C 61 43fLaCNo byte 0 (o início)

Escrito em: RFC 9639 §8.1 (stream marker)

MP3 with ID3v2informativo.mp3audio/mpeg
49 44 33ID3No byte 0 (o início)

Escrito em: ID3v2 informal standard §3.1

Matroska / WebMnorma.mkv .webmvideo/x-matroska
1A 45 DF A3·E··No byte 0 (o início)

Escrito em: RFC 8794 §4 (EBML magic)

Duas versões do formato partilham o prefixo, portanto a versão faz parte da assinatura em vez de ser lida a seguir.

ELFnormaapplication/x-executable
7F 45 4C 46·ELFNo byte 0 (o início)

Escrito em: System V ABI, ELF header (EI_MAG0..3)

DOS / Windows executabledoc. do fabricante.exe .dllapplication/vnd.microsoft.portable-executable
4D 5AMZNo byte 0 (o início)

Escrito em: Microsoft PE Format (IMAGE_DOS_HEADER)

Java classnorma.classapplication/java-vm
CA FE BA BE····No byte 0 (o início)

Escrito em: Java Virtual Machine Specification §4.1 (magic)

SQLite databasedoc. do fabricante.sqlite .dbapplication/vnd.sqlite3
53 51 4C 69 74 65 20 66 6F 72 6D 61 74 20 33 00SQLite format 3·No byte 0 (o início)

Escrito em: SQLite Database File Format §1.3 (header string)

WOFFnorma.wofffont/woff
77 4F 46 46wOFFNo byte 0 (o início)

Escrito em: WOFF File Format 1.0 §3 (signature)

WOFF2norma.woff2font/woff2
77 4F 46 32wOF2No byte 0 (o início)

Escrito em: WOFF File Format 2.0 §3 (signature)

Onde estão especificadas

normaFixado no texto normativo de uma norma publicada. Se o alterar, o ficheiro deixa de ser conforme.

informativoEstá escrito, mas num documento que não impõe requisitos: um RFC informativo, ou uma especificação entretanto substituída.

doc. do fabricanteDocumentado por quem é dono do formato e não por um organismo de normalização. Fiável na prática, e revisível sem o acordo de ninguém.

só convençãoTodas as ferramentas o implementam e nenhum documento o exige. Estes bytes só sustentam o formato porque toda a gente concorda.

Cada linha é verificada contra um ficheiro produzido por um codificador real, portanto estes bytes não vêm copiados de outra tabela.

Também disponível em: English · Español · Français · العربية

Assinaturas de ficheiro e números mágicos

Os números mágicos de 33 formatos, cada um com o documento que realmente o define, e um identificador que lê só o cabeçalho no seu navegador.

O que é uma assinatura de ficheiro?

Uma assinatura de ficheiro, ou número mágico, é uma sequência curta e fixa de bytes no início de um ficheiro que diz de que tipo ele é. Todos os PNG começam pelos mesmos oito bytes; todos os arquivos gzip pelos mesmos dois. Os programas leem-nos porque o nome não é prova nenhuma: mudar o nome de uma folha de cálculo para .png não altera nada do que lá está dentro, e um ficheiro vindo da internet tem o nome que quem o enviou lhe quis dar.

A lista abaixo traz 33 formatos com os seus bytes, em que ponto do ficheiro esses bytes estão e o tipo de media quando existe registado. O que traz também, e que as tabelas copiadas umas das outras deixam de fora, é o documento que define cada assinatura. Essa coluna acaba por ser a interessante.

Porque a resposta não é uniforme. Algumas assinaturas estão fixadas no texto normativo de uma norma publicada. Outras apenas na documentação do próprio fabricante. Outras num documento que já não tem peso nenhum. E umas quantas — ICO, bzip2, 7-Zip — são implementadas de forma idêntica por todas as ferramentas do mundo e nunca foram escritas em lado nenhum como requisito.

Como usar

  1. Largue um ficheiro, ou escolha-o. Só se lê o cabeçalho, e quem o lê é o seu navegador. Nada é enviado. Se alguma assinatura corresponder, obtém o formato, os bytes que corresponderam e onde estão definidos.
  2. Ou cole os bytes que já tem. Se está a olhar para um despejo hexadecimal, cole os primeiros bytes. Aceitam-se espaços, prefixos 0x e minúsculas; só é preciso um número par de dígitos.
  3. Procure na lista por qualquer coisa da linha. Servem o nome do formato, uma extensão, um tipo de media, um prefixo hexadecimal ou o nome de uma especificação. Escrever png põe o PNG em primeiro em vez de o enterrar debaixo de tudo o que contenha aquelas letras.

A assinatura do PNG, e a explicação que a norma deixou cair

O PNG é o formato que vale a pena ver de perto, porque os seus oito bytes são os mais bem desenhados da lista e a história deles não é a que se esperaria. São 137, 80, 78, 71, 13, 10, 26, 10 — em texto, um byte com o bit alto ligado, depois PNG, depois um retorno de carro, uma mudança de linha, um control-Z e outra mudança de linha.

Cada um está a fazer alguma coisa. O primeiro byte não é de propósito um caractere ASCII, para que um ficheiro de texto dificilmente seja confundido com um PNG e, sobretudo, para apanhar uma transferência que limpe o bit alto de cada byte. O retorno de carro e a mudança de linha apanham o problema oposto: uma transferência que converta amavelmente os fins de linha entre plataformas estraga esse par, e o ficheiro falha ao quinto byte em vez de falhar algures no meio da imagem. O control-Z impede o MS-DOS de despejar o resto de um binário no terminal quando alguém lhe faz type. A mudança de linha final apanha o inverso da conversão CR-LF.

E aqui está a parte que nos surpreendeu. Essa explicação não está na norma atual. A ISO/IEC 15948, que é o que normaliza o PNG hoje, enuncia os oito bytes e segue em frente, guardando uma única frase na sua cláusula de fundamentação a dizer que a assinatura deteta erros comuns de transmissão. O raciocínio byte a byte sobrevive apenas no RFC 2083 de 1997 — um documento marcado como Informativo, que a norma entretanto substituiu. Os bytes são normativos. As razões para serem aqueles bytes não são.

Limites honestos

Uma assinatura diz o que um ficheiro afirma ser, e é exatamente por isso que se verifica — mas é também o seu limite. Os bytes da frente são baratos de falsificar. Se está a decidir se algo é seguro de abrir, uma assinatura que corresponde diz-lhe que o ficheiro está suficientemente bem formado para ter um cabeçalho plausível e mais nada.

Nem todas as assinaturas começam no início. O marcador ustar que identifica um arquivo tar está no byte 257, e o CD001 do ISO 9660 no byte 32769, mais de 32 kilobytes lá para dentro. Tudo o que leia apenas os primeiros quatro bytes falha por completo os dois formatos de arquivo e de imagem de disco mais comuns, e é por isso que esta ferramenta lê mais longe.

Vários formatos são indistinguíveis no cabeçalho, e a ferramenta di-lo em vez de adivinhar. WebP, WAV e AVI começam pelos mesmos quatro bytes, porque os três são contentores RIFF e os bytes que os separam vêm depois. Um .docx, um .xlsx, um .jar, um .apk e um .epub são todos arquivos ZIP e levam a assinatura do ZIP; distingui-los obriga a descomprimir e ver o que está lá dentro, o que é outro trabalho. Nos dois casos mostram-se todas as correspondências em vez de se escolher uma.

Muitos formatos não têm assinatura nenhuma. CSV, texto simples, quase todo o código-fonte e SVG são apenas caracteres, e não há nada de fixo à frente com que comparar — o SVG em particular é XML, que pode começar ou não por uma declaração. Um ficheiro que não corresponde a nada daqui disse-lhe muito pouco.

Por fim, 33 formatos são uma seleção e não um censo, e a lista está limitada de propósito. A resposta completa de facto é a base de dados mágica que acompanha o comando file do Unix, com milhares de regras, lógica condicional e aritmética de bytes. O que está nesta página é o subconjunto cujos bytes se conseguem verificar contra um ficheiro real que os testes desta página constroem, portanto cada linha está verificada e não transcrita.

Porque é grátis

Porque não custa nada manter. A lista faz parte da página e a identificação acontece no seu navegador: quando larga um ficheiro, só se leem os primeiros bytes, e são lidos localmente. Nada é enviado, nenhum servidor vê o seu ficheiro e não há conta.

A tabela não está copiada de outra tabela. Cada linha que se consegue construir é verificada contra um ficheiro produzido por um codificador real, e cruzada com a identificação do próprio comando file, portanto um dígito trocado parte a compilação em vez de chegar à página. Onde um formato não pôde ser construído aqui, a página di-lo em vez de o deixar por verificar em silêncio.