شو هو الهاش؟
الهاش (Hash) هو "بصمة" بطول ثابت بتنحسب من أي بيانات: نص أو ملف. نفس المدخل بيعطي دايماً نفس الهاش، وأي تغيير ولو حرف واحد بيغيّر الهاش كلياً. وما في طريقة ترجع من الهاش للنص الأصلي، لهيك الهاش مش تشفير بينفك.
لشو بينفع؟
- التحقق من سلامة الملفات: مواقع البرامج بتنشر هاش SHA-256 للملف. احسب هاش الملف اللي نزّلتو والصقو بخانة المقارنة: إذا تطابق، الملف كامل وما حدا عدّل عليه.
- البرمجة: مفاتيح للكاش، كشف الملفات المكررة، توقيع طلبات الـ API بـ HMAC.
- الأمان: HMAC بيخلط الهاش مع مفتاح سري، فما حدا بيقدر يزوّر التوقيع بدون المفتاح.
أي خوارزمية أستعمل؟
- SHA-256: الخيار الافتراضي الآمن اليوم، وهو المستعمل بأغلب التوقيعات والبرامج.
- SHA-384 و SHA-512: أطول وآمنة كمان، وSHA-512 غالباً أسرع من SHA-256 على أجهزة 64 بت اللي ما فيها تسريع عتادي لـ SHA-256.
- MD5 و SHA-1: مكسورين أمنياً (في طرق معروفة لإنتاج ملفين مختلفين بنفس الهاش)، فما تستعملهن للأمان أو التوقيع. بس لسا منتشرين للتحقق من أخطاء النقل والتوافق مع أنظمة قديمة.
- CRC-32: مش هاش أمني أبداً، بس سريع ومستعمل بملفات ZIP وPNG لكشف الأخطاء العرضية.
ملاحظات مهمة
النص بينحسب بترميز UTF-8، يعني نفس نتيجة أغلب لغات البرمجة. انتبه للمسافات والأسطر: أمر echo بالطرفية بيضيف سطر جديد بالآخر، فالهاش بيختلف عن نفس النص بدون السطر. ولا تخزّن كلمات السر بـ MD5 أو SHA مباشرةً؛ للكلمات السرية في خوارزميات مخصصة أبطأ عن قصد متل bcrypt وArgon2.
الملفات بتنقرا قطعة قطعة بمتصفحك وما بتنرفع لأي مكان. MD5 وCRC-32 بيشتغلوا مع أي حجم، أما SHA فبيحتاج المتصفح يحمّل الملف كامل بالذاكرة، لهيك حدّو 256MB.
أسئلة شائعة
- هل يمكن فك تشفير هاش MD5 أو SHA-256؟
- لأ، الهاش باتجاه واحد وما بينفك. المواقع اللي بتدّعي "فك MD5" بتدوّر بجداول هاشات لكلمات معروفة، فبتنجح بس مع الكلمات البسيطة والمشهورة.
- كيف أتحقق أن الملف الذي نزلته سليم؟
- افتح تبويب "ملف" واختار الملف، والصق الهاش المنشور على موقع البرنامج بخانة المقارنة. إذا طلع "مطابق" فالملف سليم.
- لماذا يختلف الهاش عن موقع آخر للنص نفسه؟
- غالباً بسبب مسافة أو سطر جديد زيادة بالآخر، أو ترميز مختلف للنص العربي (هون بنستعمل UTF-8)، أو لأنو HMAC مفعّل.
- هل تُرسَل النصوص والملفات إلى خادم؟
- لأ. كل الحسابات بمتصفحك، وما في أي بيانات بتطلع من جهازك.