مولّد البصمات

ولّد بصمات MD5 وSHA لأي نص، وتحقّق من قيمة مقابل مجموع تحقّق متوقَّع.

الإدخال
MD5مكسور
SHA-1مكسور
SHA-256
SHA-384
SHA-512

ما الذي تفعله دالّة التجزئة فعلًا

تأخذ دالّة التجزئة التعمية مدخلًا بأي حجم وتُخرج منه سلسلة بايتات ثابتة الطول — تُسمّى البصمة أو «الهاش». أعطِها حرفًا واحدًا أو رواية كاملة، فتُعيد MD5 دائمًا 16 بايت وتُعيد SHA-256 دائمًا 32. والمدخل نفسه يُنتج البصمة نفسها دائمًا، وتغيير بت واحد في أي موضع من المدخل يقلب نحو نصف بتات الخرج — ولهذا يكون لملفَّين شبه متطابقين بصمتان لا صلة بينهما البتة.

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

فيمَ تُستعمل البصمات فعلًا

  • التحقّق من التنزيلات: ينشر مشروعٌ بصمة SHA-256 لإصدارٍ ما، فتحسب بصمة الملف الذي وصلك، وتطابق البصمتين يعني أن البايتات وصلت سليمة.
  • كشف التغيّر: أنظمة إدارة النسخ والنسخ الاحتياطي وإزالة التكرار تقارن البصمات بدل الملفات كاملة، لأن مقارنة 32 بايت أرخص بكثير من مقارنة الغيغابايتات.
  • Subresource Integrity: تُثبّت صفحةٌ بصمة Base64 لسكربت تُحمّله من شبكة CDN، ويرفض المتصفح تشغيله إن لم تتطابق.
  • تخزين كلمات المرور — لكن بدالّة بطيئة مصمّمة لذلك، لا ببصمة عادية أبدًا. انظر أدناه.

لاحظ الجامع بينها: البصمة بديل مضغوط عن شيء أكبر، تُستعمل للإجابة عن سؤال «أهذا هو الشيء نفسه الذي توقّعته؟» دون نقل الشيء ذاته ولا تخزينه.

MD5 وSHA-1 مكسورتان — ماذا يعني ذلك عمليًا

تُعَدّ دالّة التجزئة مكسورة متى صار بالإمكان بناء تصادم: مدخلان مختلفان يُنتجان البصمة نفسها. وتصادمات MD5 قابلة للحساب على عتاد عادي منذ 2004، وفي 2017 أنتج هجوم SHAttered ملفَّي PDF مختلفين ببصمة SHA-1 واحدة. ولهذا السبب وُسِمت الخوارزميتان في هذه الأداة.

والنتيجة العملية أضيق من «لا تستعملهما أبدًا». فالتصادم يعني أن مهاجمًا يتحكّم في الملفَّين معًا يستطيع جعل ملفٍ خبيث يطابق بصمة ملفٍ بريء، ومن ثمّ لم تعد MD5 وSHA-1 قادرتين على إثبات أن ملفًا لم يُعبث به من طرفٍ معادٍ. أما لكشف التلف العرضي — تنزيل مبتور، أو بت انقلب على قرص — فهما صالحتان تمامًا، وستظل تصادفهما في الأنظمة الموروثة وترويسات ETag وبيانات الحزم القديمة التي لن يعيد أحد كتابتها.

والقاعدة العملية: إذا كان السؤال «هل تلف هذا في الطريق؟» فـ MD5 تكفي. وإذا كان السؤال «هل استبدله أحدهم عمدًا؟» فاستعمل SHA-256 أو أقوى.

لا تخزّن كلمة مرور بهذه أبدًا

صُمّمت MD5 وSHA-1 بل وحتى SHA-256 لتكون سريعة، والسرعة هي بالضبط الخاصية الخاطئة لتخزين كلمات المرور. فبطاقة رسوميات حديثة تحسب مليارات بصمات SHA-256 في الثانية، ومن ثمّ يمكن مهاجمة قاعدة بيانات مسروقة لكلمات مرور مُجزَّأة ببساطة على نطاق هائل — ولأن كلمة المرور نفسها تُنتج البصمة نفسها دائمًا، فإن الجداول المحسوبة سلفًا تجعل الأمر أرخص بعد.

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

قراءة البصمات ومقارنتها

يمكن كتابة البصمة الواحدة بأكثر من صورة. والنظام الست عشري بحروف صغيرة هو ما تطبعه أدوات سطر الأوامر المعيارية، وهو غالبًا ما ستقارن به:

md5sum file.iso                  # لينكس
sha256sum file.iso               # لينكس
shasum -a 256 file.iso           # macOS
Get-FileHash file.iso -Algorithm SHA256   # PowerShell (يطبع بحروف كبيرة)
certutil -hashfile file.iso SHA256        # ويندوز (يطبع بحروف كبيرة)

وحالة الحروف في النظام الست عشري لا تحمل أي معنى — فـ PowerShell وcertutil يطبعان بالكبيرة، وأدوات يونكس بالصغيرة، والقيمة واحدة تمامًا. ولهذا تتجاهل خانة المقارنة في هذه الأداة حالة الحروف في الست عشري. أما مع Base64 فالأمر مختلف: فهو ترميز أكثف للبايتات نفسها، يستعمله Subresource Integrity وعدد من الواجهات البرمجية، وحالة الحروف فيه ذات دلالة — ولذلك تُقارَن بدقّة تامة.

وعادة أخيرة يحسن اكتسابها: لا تقارن بصمتين طويلتين بعينك قط لتقرّر تطابقهما. فالعين البشرية بارعة جدًا في رؤية ما تتوقّع رؤيته، وتطابق أول الأحرف وآخرها لا يعني شيئًا. الصق القيمة المتوقَّعة ودع المقارنة تكون مضبوطة.

الأسئلة الشائعة

هل يُرسَل نصي إلى خادم؟
لا. تُحسب كل بصمة داخل متصفحك — عائلة SHA عبر واجهة Web Crypto، وMD5 عبر جافاسكربت تعمل على جهازك أنت. ولا يغادر شيء مما تكتبه جهازك.
هل يمكن عكس البصمة لاستعادة النص الأصلي؟
لا. البصمة أثرٌ ثابت الطول لا نسخة مشفّرة، ولا يمكن استرجاع الأصل منها. والمواقع التي تعلن عن «فكّ تشفير MD5» إنما تبحث عن بصمتك في جدولٍ لمدخلات شائعة حُسبت سلفًا، وهذا لا ينجح إلا مع نصٍّ قصير أو متوقَّع.
لماذا تحمل MD5 وSHA-1 تحذيرًا هنا؟
لأن التصادمات عملية في كلتيهما: يمكن بناء مدخلين مختلفين يتشاركان البصمة نفسها. وهذا يجعلهما غير صالحتين لإثبات أن ملفًا لم يُعبث به عمدًا، وإن بقيتا صالحتين لالتقاط التلف العرضي.
أي خوارزمية ينبغي أن أستعمل؟
SHA-256 هي الخيار الافتراضي المعقول وهي ما تنشره أغلب المشاريع اليوم. وSHA-512 ليست أأمن منها بفارق يُذكر لهذا الغرض، لكنها أسرع على عتاد 64 بت. ولا تستعمل MD5 أو SHA-1 إلا حين يفرضهما شيء خارج عن سيطرتك.
هل أستطيع تجزئة كلمة مرور بهذه الأداة؟
تستطيع، لكن لا ينبغي أن تخزّن الناتج. فتخزين كلمات المرور يحتاج دالّة بطيئة ومُملَّحة مثل Argon2id أو scrypt أو bcrypt — والبصمات السريعة كهذه هي بالضبط ما يجعل قواعد البيانات المسروقة سهلة الكسر.
لماذا تتغيّر البصمات حين أضيف مسافة أو سطرًا جديدًا؟
لأن المسافات جزء من المدخل. والسطر الجديد في النهاية هو أشيع سبب لعدم تطابق بصمة مع ما توقّعته — فالنص المنسوخ من طرفية أو محرّر كثيرًا ما يجرّ معه سطرًا لا تراه.
هل يتعامل مع العربية والعبرية والرموز التعبيرية على نحو صحيح؟
نعم. يُرمَّز النص بايتاتٍ بترميز UTF-8 قبل التجزئة، وهو المعيار الذي تستعمله كل الأدوات الأخرى، فتجزئة «شلوم» أو رمز تعبيري هنا تعطي البصمة نفسها التي يعطيها md5sum أو sha256sum لملف UTF-8 يحوي الأحرف ذاتها.
لماذا يعالج النصوص دون الملفات؟
لا تملك Web Crypto واجهة تجزئة بالتدفّق، فيلزم قراءة الملف كاملًا إلى الذاكرة قبل تجزئته، وMD5 المكتوبة يدويًا ستكون بطيئة بوضوح مع ملف كبير. وتجزئة النصوص تغطّي الحالة الشائعة بأمانة، بدل تقديم تجزئة ملفات تُعلّق الصفحة.