ファイル・バイナリ・圧縮

ファイル形式判別名前ではなく、先頭のバイトで

ファイルを選ぶかドロップすると、追加した時点で先頭のバイトから形式を判別します。

ファイル形式判別

ファイル

ここにファイルをドロップするか「ファイルを選択」を押してください。1回につき20個まで、サイズ無制限。

各ファイルの先頭(ZIPは末尾のディレクトリも)をブラウザ内で読むだけで、アップロードはしません。

判別結果

ファイルを選ぶかドロップすると判別します。

表示の長さが変わるだけで、読み直しはしません。もっと後ろにあるシグネチャ(tar、ISO、PEヘッダー)は別に表示します。

ファイルを選ぶかドロップすると判別します。

レポートはプレーンテキストで、ファイルごとにサイズ・判定・MIME・拡張子の比較・ヘッダーのバイトを出力します。

ファイル形式判別が必要になるのは、名前が当てにならず、中身から形式を調べるしかないときです。拡張子のない添付ファイル、ダブルクリックしても開けないダウンロード、photo.jpgに名前を変えたスクリプトを弾きたいアップロード処理。拡張子は誰かが付けたラベルにすぎませんが、ファイル先頭の数バイト(マジックナンバー、シグネチャ)は作成したプログラムが書き込んだものです。

このファイル形式判別はそのバイトをブラウザ内で読み、形式名とMIMEタイプの候補を示し、拡張子と突き合わせます。判定の根拠が完全一致のシグネチャなのか、ZIP内のファイル名のような構造の確認なのか、テキストからの推測なのかも明記し、一致したバイトをハイライトするので、結論を鵜呑みにせず自分で確かめられます。

このファイル形式判別を使う理由

判定をバイト単位で確かめられ、拡張子もあわせて確認できます。

判定の根拠になったバイトが見える

ヘッダーを16進数とASCIIで表示し、一致したシグネチャをハイライトします。PNGなら89 50 4E 47、ZIPなら50 4B 03 04。tarのようにオフセット257にustarを置く形式も、オフセット付きで別に示します。

16進数のヘッダーバイトが2行並び、先頭8バイトがハイライトされて括弧で示され、点線が緑のチェック付きの画像形式バッジにつながっている図。

拡張子は信じるのではなく確かめる

.jpgに名前を変えたPNGは「不一致」になり、.jpgなら本来どの形式かも表示します。一方、中身が正しくZIPコンテナである.docxは誤りではなく「互換」と表示します。

先頭バイト50 4B 03 04がアーカイブのアイコンにつながる一方、名前のラベルは画像のアイコンを示し、赤いバツ印で両者が食い違うことを表す図。

判定を左右する3つのこと

01

ファイルを追加するだけ

選ぶかドロップした瞬間に判別し、新しいファイルはリストに追加されます(置き換えません)。読むのは各ファイルの先頭64KiBと、ZIPらしいときだけ末尾64KiBなので、20GBのディスクイメージも20KBのアイコンと同じ速さです。

  • 「サンプルを読み込む」では、通常のPNG、.jpgという名前のPNG、最小の.docx、判別できない.binの4つを追加します。
02

根拠の種類を読む

「シグネチャが完全一致」は決まった位置の決まったバイトが一致したこと。「シグネチャ+構造を確認」は内部のフィールドも読んだこと(ZIP内のファイル名、MP4のftypのブランド、RIFFのサブタイプ)。「テキスト・パターンから推測」はJSONやXML、UTF-8テキストのように固定のマジックナンバーがない形式です。

  • 古いOfficeファイル(doc、xls、ppt、msi)は同じシグネチャを共有するため、1つに決めずMIMEタイプの候補を並べます。
03

拡張子と比べてから書き出す

「互換」はエラーではありません。.docx、.jar、.apkはどれもZIPで、.m4aはMP4コンテナです。注意すべきは「不一致」です。「ブラウザのMIME」の行はFile.typeの値で、拡張子から決まるため、検証には使えません。

  • 表示するバイト数は表示だけに影響し、レポートのヘッダーも同じ長さで出力されます。

判別できる形式と判定のしかた

70以上の形式とサブタイプ

画像、PDFとOffice文書、圧縮・アーカイブ形式、実行ファイル(ELF、PE、Mach-O、WebAssembly)、音声・動画コンテナ、フォント、データベースやキャプチャファイル、さらにXML、SVG、HTML、PEMのように先頭に目印があるテキスト形式。

ZIP系列を見分ける

ZIPのセントラルディレクトリにあるファイル名だけを読み、DOCX、XLSX、PPTX、ODT、EPUB、JAR、APK、IPAを普通のZIPと区別します。中身は1つも展開しません。

拡張子の比較は5段階

一致・不一致・互換・拡張子なし・比較不可。正しい.docxが誤った.zip扱いになることはなく、拡張子がない場合は推奨の拡張子を示します。

正確なサイズ、サイズ無制限

各ファイルの正確なバイト数とKiB・MiB・GiB換算を表示します。判別にかかる時間はファイルの大きさに比例しないため、サイズの上限はありません。

シグネチャ判定でわからないこと

ウイルススキャンではない
PNGのシグネチャが正しくても安全とは限らず、PEと判定されても危険とは限りません。正しい画像の後ろに別のデータを付けたポリグロットファイルもあります。安全性の判断にはウイルス対策ソフトを使ってください。
1つのシグネチャが複数の形式を指すことがある
古いOffice文書とMSIインストーラーはOLE2のシグネチャを共有し、手がかりになるファイル名がないZIPはZIPのままです。その場合は1つに絞らず、MIMEタイプの候補をすべて示します。
目印のないテキストはテキストとして扱う
CSV、YAML、INI、Markdown、ソースコードにはシグネチャがないため、プレーンテキスト(UTF-8、BOMがあればUTF-16)と表示します。Shift_JISなど他の文字コードは推測しません。
判別するだけで分解はしない
アーカイブの展開、Exifの解析、実行ファイルのアーキテクチャやセクションの分解はしません。全体の16進ダンプはバイナリエディタの役目です。1回に20個まで、フォルダーの再帰的な読み込みはしません。

ファイル形式判別のよくある質問

拡張子がわからなくて開けないときはどうすればいいですか?

上のツールにドロップしてください。判別には名前を使わず先頭のバイトだけを見るので、拡張子がなくても形式がわかり、「推奨される拡張子」が表示されます。その拡張子で開けるアプリを選べば開けることがほとんどです。

拡張子を偽装してもバレますか?

中身のシグネチャと拡張子が違えば「不一致」と表示されます。ただしシグネチャが見るのはファイルの先頭だけなので、正しい画像の後ろにデータを付けたファイルまでは見抜けません。

ファイルのマジックナンバーの一覧はありますか?

このツールのシグネチャ表はWHATWGのMIME Sniffing仕様、Gary Kesslerのシグネチャ表、Wikipediaのファイルシグネチャ一覧を参考にしています。判別結果では実際に一致したバイトとオフセットをハイライトするので、一覧の該当行を直接示すのと同じです。

Windowsでファイル形式を確認するコマンドはありますか?

Windows標準にはLinuxのfileコマンドに当たるものがなく、PowerShellでFormat-Hexを使い先頭バイトを見て自分で照合するのが一般的です。ブラウザで開けるこのファイル形式判別なら、インストールなしで同じことができます。

File.typeは拡張子からMIMEタイプを返すだけですか?

はい。ブラウザはFile.typeを拡張子から決めるので、名前を変えれば値も変わります。このツールでは「ブラウザのMIME」の行に並べて表示するので、中身から判別した形式との違いがすぐわかります。

アップロードされたファイルが正常な画像かどうかチェックするには?

まずマジックナンバーで形式を確認するのが第一段階で、名前を変えただけのファイルはここで弾けます。ただし完全ではないので、サーバー側では画像ライブラリで実際にデコード・再エンコードすることをおすすめします。

解決しませんでしたか?

手元のファイルでファイル形式判別を試す

まずサンプルで一致・不一致・ZIPのサブタイプ・判別不可の4つの結果を見比べてから、気になるファイルをファイル形式判別にドロップしてください。

すべての処理はブラウザ内で完結します。