FreeToGenerate.com

الملفُّ يقول ما هو في بايتاته الأولى. بعضُ الصيغ تثبّتها في معيار، وبعضُها لم يكتبها قطُّ. ولا يُرفع شيء.

تعرَّف على ملف

أفلِت ملفًّا هنا، أو اختر واحدًا.

لا تُقرأ إلا البايتاتُ الأولى، وتُقرأ في متصفحك. فالملفُّ لا يُرفع ولا يغادر جهازك.

معيار
15
إعلاميّ
1
توثيق المُنتِج
14
عُرفٌ فحسب
3
33 / 33
PNGمعيار.pngimage/png
89 50 4E 47 0D 0A 1A 0A·PNG····عند البايت 0 (البداية)

مكتوبةٌ في: ISO/IEC 15948 §5.2

المعيارُ الحاليّ يذكر هذه البايتات الثماني ولا يقول لماذا. أما التعليل — بايتٌ أولُ خارج ASCII ليُكشف النقلُ الذي يمسح البتَّ الأعلى، وCR-LF ليُكشف تحويلُ نهايات الأسطر، وcontrol-Z كي لا يسكب MS-DOS الملفَّ على الشاشة، وسطرٌ جديدٌ أخيرٌ للمشكلة العكسية — فلا يبقى إلا في الـRFC الإعلاميّ الذي حلَّ المعيارُ محلَّه.

JPEGمعيار.jpg .jpegimage/jpeg
FF D8 FF···عند البايت 0 (البداية)

مكتوبةٌ في: ITU-T T.81 §B.1 (SOI marker)

الثابتُ هو البايتات الأولى وحدها. وما بعدها يتغيّر بتغيّر المُرمِّز، ولذلك كانت هذه البصمةُ أقصرَ من أكثرها.

GIF 87aتوثيق المُنتِج.gifimage/gif
47 49 46 38 37 61GIF87aعند البايت 0 (البداية)

مكتوبةٌ في: GIF 87a, Header block

نسختان من الصيغة تتشاركان بادئةً، فصارت النسخةُ جزءًا من البصمة بدل أن تُقرأ بعدها.

GIF 89aتوثيق المُنتِج.gifimage/gif
47 49 46 38 39 61GIF89aعند البايت 0 (البداية)

مكتوبةٌ في: GIF 89a §17 (Header)

نسختان من الصيغة تتشاركان بادئةً، فصارت النسخةُ جزءًا من البصمة بدل أن تُقرأ بعدها.

BMPتوثيق المُنتِج.bmp .dibimage/bmp
42 4DBMعند البايت 0 (البداية)

مكتوبةٌ في: Microsoft BITMAPFILEHEADER (bfType)

WebPمعيار.webpimage/webp
52 49 46 46RIFFعند البايت 0 (البداية)

مكتوبةٌ في: RFC 9649 §2 (RIFF container)

‏RIFF حاوٍ لا صيغة. فـWebP وWAV وAVI متطابقةٌ بايتًا ببايت هنا، والبايتاتُ الأربعُ التي تفصلها تأتي بعد ذلك.

TIFF (little-endian)توثيق المُنتِج.tif .tiffimage/tiff
49 49 2A 00II*·عند البايت 0 (البداية)

مكتوبةٌ في: TIFF 6.0 §2 (Image File Header)

TIFF (big-endian)توثيق المُنتِج.tif .tiffimage/tiff
4D 4D 00 2AMM·*عند البايت 0 (البداية)

مكتوبةٌ في: TIFF 6.0 §2 (Image File Header)

ICOعُرفٌ فحسب.icoimage/vnd.microsoft.icon
00 00 01 00····عند البايت 0 (البداية)

مكتوبةٌ في: لا شيء مُلزِم

Photoshopتوثيق المُنتِج.psdimage/vnd.adobe.photoshop
38 42 50 538BPSعند البايت 0 (البداية)

مكتوبةٌ في: Adobe Photoshop File Formats, File Header

PDFمعيار.pdfapplication/pdf
25 50 44 46 2D%PDF-عند البايت 0 (البداية)

مكتوبةٌ في: ISO 32000-2 §7.5.2 (File header)

البصمةُ نصٌّ مقروءٌ لا ثنائيّ، ولذلك تنجو هذه الملفاتُ غالبًا من فتحها في محرّر نصوص.

RTFتوثيق المُنتِج.rtfapplication/rtf
7B 5C 72 74 66{\rtfعند البايت 0 (البداية)

مكتوبةٌ في: Microsoft RTF Specification

البصمةُ نصٌّ مقروءٌ لا ثنائيّ، ولذلك تنجو هذه الملفاتُ غالبًا من فتحها في محرّر نصوص.

ZIPتوثيق المُنتِج.zipapplication/zip
50 4B 03 04PK··عند البايت 0 (البداية)

مكتوبةٌ في: PKWARE APPNOTE §4.3.7 (local file header)

الـ‏.docx و.xlsx و.jar و.apk و.epub كلُّها أرشيفات ZIP وكلُّها تحمل هذه البايتات. والتمييزُ بينها يقتضي فتح الأرشيف والنظرَ فيما بداخله.

gzipمعيار.gzapplication/gzip
1F 8B··عند البايت 0 (البداية)

مكتوبةٌ في: RFC 1952 §2.3.1 (ID1, ID2)

bzip2عُرفٌ فحسب.bz2application/x-bzip2
42 5A 68BZhعند البايت 0 (البداية)

مكتوبةٌ في: لا شيء مُلزِم

XZتوثيق المُنتِج.xzapplication/x-xz
FD 37 7A 58 5A 00·7zXZ·عند البايت 0 (البداية)

مكتوبةٌ في: The .xz File Format §2.1.1.1 (Header Magic Bytes)

7-Zipعُرفٌ فحسب.7zapplication/x-7z-compressed
37 7A BC AF 27 1C7z··'·عند البايت 0 (البداية)

مكتوبةٌ في: لا شيء مُلزِم

RAR 5توثيق المُنتِج.rarapplication/vnd.rar
52 61 72 21 1A 07 01 00Rar!····عند البايت 0 (البداية)

مكتوبةٌ في: RAR archive format documentation

tar (ustar)معيار.tarapplication/x-tar
75 73 74 61 72ustarعند البايت 257

مكتوبةٌ في: POSIX.1-2017 (ustar Interchange Format)

هذه لا تبدأ من أول الملف، فكلُّ ما يقرأ البايتات الأولى وحدها يفوته تمامًا.

ISO 9660معيار.isoapplication/x-iso9660-image
43 44 30 30 31CD001عند البايت 32769

مكتوبةٌ في: ECMA-119 §8.4.1 (Standard Identifier)

هذه لا تبدأ من أول الملف، فكلُّ ما يقرأ البايتات الأولى وحدها يفوته تمامًا.

WAVتوثيق المُنتِج.wavaudio/vnd.wave
52 49 46 46RIFFعند البايت 0 (البداية)

مكتوبةٌ في: RFC 2361 / Microsoft RIFF

‏RIFF حاوٍ لا صيغة. فـWebP وWAV وAVI متطابقةٌ بايتًا ببايت هنا، والبايتاتُ الأربعُ التي تفصلها تأتي بعد ذلك.

AVIتوثيق المُنتِج.avivideo/vnd.avi
52 49 46 46RIFFعند البايت 0 (البداية)

مكتوبةٌ في: Microsoft RIFF (AVI form)

‏RIFF حاوٍ لا صيغة. فـWebP وWAV وAVI متطابقةٌ بايتًا ببايت هنا، والبايتاتُ الأربعُ التي تفصلها تأتي بعد ذلك.

MP4 / ISO base mediaمعيار.mp4 .m4a .movvideo/mp4
66 74 79 70ftypعند البايت 4

مكتوبةٌ في: ISO/IEC 14496-12 §4.3 (File Type Box)

هذه لا تبدأ من أول الملف، فكلُّ ما يقرأ البايتات الأولى وحدها يفوته تمامًا.

Oggمعيار.ogg .oga .ogvapplication/ogg
4F 67 67 53OggSعند البايت 0 (البداية)

مكتوبةٌ في: RFC 3533 §6 (capture_pattern)

FLACمعيار.flacaudio/flac
66 4C 61 43fLaCعند البايت 0 (البداية)

مكتوبةٌ في: RFC 9639 §8.1 (stream marker)

MP3 with ID3v2إعلاميّ.mp3audio/mpeg
49 44 33ID3عند البايت 0 (البداية)

مكتوبةٌ في: ID3v2 informal standard §3.1

Matroska / WebMمعيار.mkv .webmvideo/x-matroska
1A 45 DF A3·E··عند البايت 0 (البداية)

مكتوبةٌ في: RFC 8794 §4 (EBML magic)

نسختان من الصيغة تتشاركان بادئةً، فصارت النسخةُ جزءًا من البصمة بدل أن تُقرأ بعدها.

ELFمعيارapplication/x-executable
7F 45 4C 46·ELFعند البايت 0 (البداية)

مكتوبةٌ في: System V ABI, ELF header (EI_MAG0..3)

DOS / Windows executableتوثيق المُنتِج.exe .dllapplication/vnd.microsoft.portable-executable
4D 5AMZعند البايت 0 (البداية)

مكتوبةٌ في: Microsoft PE Format (IMAGE_DOS_HEADER)

Java classمعيار.classapplication/java-vm
CA FE BA BE····عند البايت 0 (البداية)

مكتوبةٌ في: Java Virtual Machine Specification §4.1 (magic)

SQLite databaseتوثيق المُنتِج.sqlite .dbapplication/vnd.sqlite3
53 51 4C 69 74 65 20 66 6F 72 6D 61 74 20 33 00SQLite format 3·عند البايت 0 (البداية)

مكتوبةٌ في: SQLite Database File Format §1.3 (header string)

WOFFمعيار.wofffont/woff
77 4F 46 46wOFFعند البايت 0 (البداية)

مكتوبةٌ في: WOFF File Format 1.0 §3 (signature)

WOFF2معيار.woff2font/woff2
77 4F 46 32wOF2عند البايت 0 (البداية)

مكتوبةٌ في: WOFF File Format 2.0 §3 (signature)

أين تُحدَّد هذه البصمات

معيارمثبَّتةٌ في المتن المُلزِم لمعيارٍ منشور. وتغييرُها يُخرج الملفَّ عن المطابقة.

إعلاميّمكتوبةٌ، لكن في وثيقةٍ لا تفرض شيئًا: RFC إعلاميّ، أو مواصفةٌ حلّ محلَّها غيرُها.

توثيق المُنتِجيوثّقها مالكُ الصيغة لا هيئةُ تقييس. موثوقةٌ عمليًّا، وقابلةٌ للتعديل دون موافقة أحد.

عُرفٌ فحسبتنفّذها كلُّ الأدوات ولا تشترطها وثيقة. فهذه البايتاتُ قائمةٌ لأنّ الجميع متفقون عليها فحسب.

كلُّ صفٍّ مقيسٌ على ملفٍّ أنتجه مُرمِّزٌ حقيقيّ، فهذه البايتاتُ ليست منقولةً عن جدولٍ آخر.

متوفر أيضًا بلغات أخرى: English · Español · Português · Français

بصمات الملفات والأرقام السحرية

الأرقامُ السحرية لثلاثٍ وثلاثين صيغة، لكلٍّ منها الوثيقةُ التي تحدّدها فعلًا، وأداةُ تعرُّفٍ لا تقرأ إلا الترويسة، في متصفحك.

ما بصمةُ الملف؟

بصمةُ الملف — أو الرقمُ السحريّ — سلسلةٌ قصيرةٌ ثابتةٌ من البايتات في أول الملف تقول ما نوعُه. فكلُّ ملفّ PNG يبدأ بالبايتات الثماني نفسِها، وكلُّ أرشيف gzip يبدأ بالبايتين نفسيهما. وتقرأها البرامجُ لأنّ الاسمَ ليس دليلًا: فتغييرُ اسم جدولٍ حسابيٍّ إلى ‎.png لا يغيّر شيئًا مما بداخله، والملفُّ الآتي من الإنترنت يحمل الاسمَ الذي اختاره مرسِلُه.

والقائمةُ أدناه فيها ثلاثٌ وثلاثون صيغةً ببايتاتها، وموضعُ تلك البايتات من الملف، ونوعُ الوسائط حيث يكون مسجَّلًا. وفيها أيضًا ما تُسقطه الجداولُ المنقولةُ بعضُها عن بعض: الوثيقةُ التي تحدّد كلَّ بصمة. وهذا العمودُ هو المثيرُ للاهتمام كما تبيّن.

لأنّ الجوابَ ليس واحدًا. فبعضُ البصمات مثبَّتٌ في المتن المُلزِم لمعيارٍ منشور، وبعضُها ليس إلا في توثيق المُنتِج نفسِه، وبعضُها في وثيقةٍ لم يعد لها وزن. وقليلٌ منها — ICO وbzip2 و7-Zip — تنفّذه كلُّ أداةٍ في الأرض تنفيذًا واحدًا، ولم يُكتب قطُّ في أيّ مكانٍ بوصفه شرطًا.

كيف تستعملها

  1. أفلِت ملفًّا، أو اخترْه. لا تُقرأ إلا الترويسة، ويقرؤها متصفحُك. ولا يُرفع شيء. فإن طابقت بصمةٌ حصلتَ على الصيغة والبايتات التي طابقت وموضعِ تحديدها.
  2. أو الصق البايتات التي معك. إن كنت تنظر في تفريغٍ ستّ عشريّ فالصق البايتات الأولى. تُقبل المسافاتُ وبادئاتُ 0x والحروفُ الصغيرة؛ كلُّ ما يلزم عددٌ زوجيٌّ من الخانات.
  3. ابحث في القائمة بأيّ شيءٍ في الصفّ. يصلح اسمُ الصيغة أو الامتدادُ أو نوعُ الوسائط أو بادئةٌ ستّ عشرية أو اسمُ مواصفة. وكتابةُ png تضع PNG أولًا بدل أن تدفنه تحت كلّ ما يحوي تلك الحروف.

بصمةُ PNG، والتعليلُ الذي أسقطه المعيار

‏PNG هي الصيغةُ الجديرةُ بالنظر عن قرب، فبايتاتُها الثمانُ أدقُّ ما في القائمة تصميمًا، وقصّتُها ليست ما تتوقّع. وهي 137 و80 و78 و71 و13 و10 و26 و10؛ وبالنصّ: بايتٌ بتُه الأعلى مرفوع، ثم PNG، ثم إرجاعُ سطر، ثم سطرٌ جديد، ثم control-Z، ثم سطرٌ جديدٌ أخير.

ولكلٍّ منها عمل. فالبايتُ الأولُ ليس حرفَ ASCII عن قصد، كي لا يُحسب ملفٌّ نصيٌّ ملفَّ PNG، وقبل ذلك كي يُكشف نقلٌ يمسح البتَّ الأعلى من كلّ بايت. وإرجاعُ السطر والسطرُ الجديد يكشفان المشكلة المقابلة: فنقلٌ «متعاون» يحوّل نهاياتِ الأسطر بين المنصّات يُفسد ذلك الزوج، فيسقط الملفُّ عند البايت الخامس بدل أن يسقط في عمق الصورة. وcontrol-Z يمنع MS-DOS من سكب بقية ملفٍّ ثنائيٍّ على الطرفية حين يكتب أحدُهم type. والسطرُ الجديدُ الأخير يكشف عكسَ تحويل CR-LF.

وهنا ما فاجأنا: هذا التعليلُ ليس في المعيار الحاليّ. فـISO/IEC 15948، وهو ما يقيّس PNG اليوم، يذكر البايتات الثمانَ ويمضي، ولا يُبقي إلا جملةً واحدةً في بند التسويغ مفادُها أنّ البصمة تكشف أخطاء النقل الشائعة. أما الاستدلالُ بايتًا بايتًا فلا يبقى إلا في RFC 2083 من عام 1997 — وهي وثيقةٌ موسومةٌ بـ«إعلاميّة»، حلَّ المعيارُ محلَّها. فالبايتاتُ مُلزِمة، وأسبابُ كونها هذه البايتات ليست كذلك.

حدودٌ صريحة

البصمةُ تقول ما يدّعيه الملفُّ أنه هو، وهذا بعينه سببُ فحصها — وهو أيضًا حدُّها. فبايتاتُ المقدّمة رخيصةُ التزوير. فإن كنت تقرّر هل يُؤمَن فتحُ شيء، فبصمةٌ مطابقةٌ تقول لك إنّ الملفَّ سليمُ البنية بما يكفي ليحمل ترويسةً معقولة، ولا شيءَ غير ذلك.

وليست كلُّ بصمةٍ تبدأ من الأول. فعلامةُ ustar التي تعرّف أرشيف tar عند البايت 257، وCD001 في ISO 9660 عند البايت 32769، أي بعد أكثرَ من اثنين وثلاثين كيلوبايت. فكلُّ ما يقرأ البايتات الأربعَ الأولى وحدها يفوته أشيعُ صيغتَي أرشيفٍ وصورةِ قرص، ولهذا تقرأ هذه الأداةُ أبعد.

وصيغٌ عدّةٌ لا تُميَّز عند الترويسة، والأداةُ تقول ذلك بدل أن تخمّن. فـWebP وWAV وAVI تبدأ بالبايتات الأربع نفسِها، لأنّ ثلاثتها حاوياتُ RIFF والبايتاتُ الفاصلةُ تأتي بعد. والـ‏.docx و.xlsx و.jar و.apk و.epub كلُّها أرشيفات ZIP تحمل بصمة ZIP؛ وتمييزُها يقتضي فكَّ الضغط والنظرَ في الداخل، وذاك عملٌ آخر. وفي الحالين تُعرض كلُّ المطابقات بدل اختيار واحدة.

وصيغٌ كثيرةٌ بلا بصمةٍ أصلًا. فـCSV والنصُّ الصرف وأكثرُ الشِّفرة المصدرية وSVG ليست إلا حروفًا، ولا شيءَ ثابتًا في المقدّمة يُقارَن به — وSVG على وجه الخصوص XML، وقد يبدأ بإعلانٍ وقد لا يبدأ. فالملفُّ الذي لا يطابق شيئًا هنا لم يخبرك بكثير.

وأخيرًا، ثلاثٌ وثلاثون صيغةً اختيارٌ لا إحصاء، والقائمةُ محدودةٌ عن قصد. فالجوابُ الكاملُ عمليًّا هو قاعدةُ السحر المرافقةُ لأمر file في يونكس، وفيها آلافُ القواعد بمنطقٍ شرطيٍّ وحسابٍ على البايتات. وما في هذه الصفحة هو الجزءُ الذي يمكن قياسُ بايتاته على ملفٍّ حقيقيٍّ تبنيه اختباراتُ هذه الصفحة نفسُها، فكلُّ صفٍّ هنا مُتحقَّقٌ منه لا منقول.

لماذا هي مجانية؟

لأن تشغيلها لا يكلّف شيئًا. فالقائمةُ جزءٌ من الصفحة، والتعرُّفُ يجري في متصفحك: فحين تُفلِت ملفًّا لا تُقرأ إلا بايتاتُه الأولى، وتُقرأ محليًّا. لا يُرفع شيء، ولا يرى أيُّ خادمٍ ملفَّك، ولا حسابَ هناك.

والجدولُ ليس منقولًا عن جدولٍ آخر. فكلُّ صفٍّ يمكن بناؤه مقيسٌ على ملفٍّ أنتجه مُرمِّزٌ حقيقيّ، ومقابَلٌ بتعرُّف أمر file نفسِه، فخانةٌ مقلوبةٌ تكسر البناءَ بدل أن تبلغ الصفحة. وحيث تعذّر بناءُ صيغةٍ هنا تقول الصفحةُ ذلك بدل أن تتركها بلا تحقُّقٍ في صمت.