Skip to content
العودة إلى المدوّنة
دروس تعليمية

MD5 مقابل SHA-256: مقارنة خوارزميات التجزئة للمطورين

قارن بين MD5 وSHA-1 وSHA-256 وSHA-512 من حيث الأمان والسرعة وحجم المخرجات. تعلم أي تجزئة تختار للمجاميع التدقيقية وتخزين كلمات المرور.

١٢ دقيقة قراءة

MD5 مقابل SHA-256: أي خوارزمية تجزئة يجب أن تستخدم؟

التجزئة هي واحدة من أكثر العمليات أساسية في الحوسبة — ومع ذلك فإن اختيار الخوارزمية الخاطئة يمكن أن يعرض نظامك لهجمات التصادم أو تلف البيانات أو عبء أداء غير ضروري. يقارن هذا الدليل بين أربع خوارزميات تجزئة الأكثر استخداماً ويمنحك إطاراً واضحاً للقرار.

ما هي دالة التجزئة؟

تأخذ دالة التجزئة المشفرة بيانات مدخلة عشوائية وتنتج مخرجات ذات حجم ثابت (“الملخص” أو “التجزئة”). دوال التجزئة الجيدة لها ثلاث خصائص:

  1. حتمية: نفس المدخلات تنتج دائماً نفس المخرجات.
  2. أحادية الاتجاه: لا يمكنك عكس التجزئة لاستعادة المدخلات الأصلية.
  3. مقاومة التصادم: يجب أن يكون من المستحيل حسابياً إيجاد مدخلين مختلفين ينتجان نفس التجزئة.

عندما تُكسر الخاصية رقم 3، تُعتبر الخوارزمية “مكسورة تشفيرياً” — وهذا بالضبط ما حدث لـ MD5 وSHA-1.

مقارنة الخوارزميات في لمحة

الخاصيةMD5SHA-1SHA-256SHA-512
حجم المخرجات128 بت (32 حرف ست عشري)160 بت (40 حرف ست عشري)256 بت (64 حرف ست عشري)512 بت (128 حرف ست عشري)
حجم الكتلة512 بت512 بت512 بت1024 بت
سنة الإصدار1991199520012001
المصممRon RivestNSA / NISTNSA / NISTNSA / NIST
مقاومة التصادممكسورة (2004)مكسورة (2017)آمنةآمنة
السرعة (نسبية)الأسرعسريعمتوسطمتوسط (أسرع على 64 بت)
حالة NISTمُهملمُهملموصى بهموصى به

MD5: سريع لكنه مكسور

MD5 (Message-Digest Algorithm 5) صممه Ronald Rivest في 1991 وأصبح المعيار الفعلي للمجاميع التدقيقية طوال التسعينيات وأوائل الألفينيات. ينتج تجزئة 128 بت في 32 حرف ست عشري.

لماذا MD5 مكسور

في 2004، أظهرت Xiaoyun Wang هجمات تصادم عملية ضد MD5. بحلول 2008، أنشأ الباحثون شهادة SSL مزيفة باستخدام تصادمات MD5، مما أثبت أن الهجوم لم يكن نظرياً فقط. اليوم، يمكن توليد تصادمات MD5 في ثوانٍ على أجهزة المستهلك.

// Generate an MD5 hash (for non-security use only)
// Using the Web Crypto API is not available for MD5 — use a library
import { md5 } from 'hash-wasm';

const hash = await md5('Hello, World!');
console.log(hash);
// → 'bea8252ff4e80f41719ea13cdf007273' (32 hex chars)

متى يكون MD5 مقبولاً

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

  • إزالة تكرار الملفات: اكتشاف الملفات المكررة في أنظمة التخزين
  • مفاتيح التخزين المؤقت: توليد مفاتيح قصيرة وحتمية لعمليات البحث في ذاكرة التخزين المؤقت
  • مجاميع تدقيق سلامة البيانات: التحقق السريع من عدم تلف البيانات عن طريق الخطأ (ليس التلاعب المتعمد)
  • التوافق مع الأنظمة القديمة: التشغيل البيني مع الأنظمة القديمة التي تتطلب MD5

التمييز الرئيسي: MD5 يحمي من التلف العرضي لكن ليس من التلاعب المتعمد.

SHA-1: مُهمل لكنه لا يزال موجوداً

SHA-1 (Secure Hash Algorithm 1) صممته NSA ونشرته NIST في 1995. ينتج تجزئة 160 بت في 40 حرف ست عشري.

في 2017، أظهرت Google وCWI Amsterdam أول تصادم عملي لـ SHA-1 (هجوم “SHAttered”)، حيث أنشأتا ملفي PDF مختلفين بنفس تجزئة SHA-1. كانت المتصفحات الرئيسية وسلطات الشهادات قد بدأت بالفعل برفض شهادات SHA-1 بحلول 2016.

استخدم SHA-1 فقط للتوافق مع الأنظمة التي تتطلبه (مثل Git الذي يستخدم SHA-1 لتجزئات الإيداع، رغم أنه في طور الانتقال إلى SHA-256). لأي تطوير جديد، اختر SHA-256 أو أقوى.

SHA-256: المعيار الحالي

SHA-256 جزء من عائلة SHA-2، صممته NSA ونشرته NIST في 2001. ينتج تجزئة 256 بت في 64 حرف ست عشري وهو الخوارزمية الموصى بها لجميع احتياجات التجزئة تقريباً في 2026.

// Generate a SHA-256 hash using the Web Crypto API (browser-native)
async function sha256(text) {
  const data = new TextEncoder().encode(text);
  const hash = await crypto.subtle.digest('SHA-256', data);
  return Array.from(new Uint8Array(hash))
    .map(b => b.toString(16).padStart(2, '0'))
    .join('');
}

const hash = await sha256('Hello, World!');
console.log(hash);
// → 'dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f'

لماذا SHA-256 هو الخيار الافتراضي

  • لا هجمات معروفة: حتى 2026، لا توجد هجمات تصادم أو استباق صورة عملية ضد SHA-256
  • أصلي في المتصفح: متاح عبر Web Crypto API في جميع المتصفحات الحديثة — لا حاجة لمكتبات
  • معيار صناعي: يُستخدم في شهادات TLS وBitcoin ومديري الحزم (npm، pip) وملخصات صور Docker ومعظم أنظمة التحقق من السلامة
  • معتمد من NIST: موصى به لجميع التطبيقات الحساسة أمنياً

SHA-512: عندما تحتاج المزيد

ينتج SHA-512 تجزئة 512 بت في 128 حرف ست عشري. يستخدم حجم كتلة 1024 بت (مقابل 512 بت لـ SHA-256)، مما يجعله أسرع من SHA-256 على معالجات 64 بت لأنه يعالج المزيد من البيانات لكل دورة.

# Python: SHA-512 is just as easy as SHA-256
import hashlib

hash_256 = hashlib.sha256(b'Hello, World!').hexdigest()
hash_512 = hashlib.sha512(b'Hello, World!').hexdigest()

print(f"SHA-256: {hash_256}")  # 64 chars
print(f"SHA-512: {hash_512}")  # 128 chars

استخدم SHA-512 عندما:

  • تحتاج هامش أمان أكبر (مقاومة تصادم 256 بت مقابل 128 بت لـ SHA-256)
  • منصتك 64 بت والأداء مهم (SHA-512 يمكن أن يكون أسرع 1.5 مرة من SHA-256 على x86-64)
  • البروتوكول أو المواصفات تتطلبه (بعض مخططات الشهادات، متطلبات امتثال محددة)

لمعظم التطبيقات، SHA-256 كافٍ. الطول الإضافي لتجزئات SHA-512 يضاعف التخزين وعرض النطاق الترددي بدون فائدة أمنية عملية لحالات الاستخدام النموذجية.

إطار القرار: أي تجزئة تستخدم

لسلامة الملفات والمجاميع التدقيقية

استخدم SHA-256. إنه المعيار للتحقق من التنزيلات ومقارنة محتوى الملفات وضمان عدم تلف البيانات. إذا كنت تستبدل نظاماً قائماً على MD5، فإن SHA-256 هو الترقية المباشرة.

# Verify a download's integrity
sha256sum downloaded-file.tar.gz
# Compare output against the published hash

لتخزين كلمات المرور

لا تستخدم MD5 ولا SHA-256 مباشرة. دوال التجزئة ذات الأغراض العامة سريعة جداً لتجزئة كلمات المرور — يمكن للمهاجم تجربة مليارات التخمينات في الثانية. بدلاً من ذلك، استخدم خوارزمية تجزئة كلمات مرور مخصصة:

الخوارزميةالحالةملاحظات
Argon2idموصى بهالفائز بمسابقة تجزئة كلمات المرور 2015؛ صعب على الذاكرة
bcryptجيدمدعوم على نطاق واسع؛ ملح مدمج؛ عامل عمل قابل للتعديل
scryptجيدصعب على الذاكرة؛ يُستخدم في بعض أنظمة العملات المشفرة
PBKDF2مقبولمعتمد من NIST لكنه ليس صعباً على الذاكرة؛ استخدم ≥600,000 تكرار
SHA-256غير كافٍسريع جداً؛ بدون ملح مدمج؛ معرض لهجمات GPU
MD5خطيرمكسور + سريع جداً؛ يُكسر بسهولة
// WRONG: Don't hash passwords with SHA-256
const hash = await sha256(password); // Crackable at billions/sec

// RIGHT: Use bcrypt (Node.js example)
import bcrypt from 'bcrypt';
const hash = await bcrypt.hash(password, 12); // 12 rounds = ~250ms
const isValid = await bcrypt.compare(input, hash);

لـ HMAC ومصادقة الرسائل

استخدم SHA-256 مع HMAC. يجمع HMAC (Hash-based Message Authentication Code) بين دالة تجزئة ومفتاح سري للتحقق من السلامة والمصداقية معاً:

// HMAC-SHA256 for webhook signature verification
async function verifyWebhook(payload, signature, secret) {
  const key = await crypto.subtle.importKey(
    'raw', new TextEncoder().encode(secret),
    { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']
  );
  const sig = Uint8Array.from(atob(signature), c => c.charCodeAt(0));
  return crypto.subtle.verify('HMAC', key, sig, new TextEncoder().encode(payload));
}

للتخزين المعنون بالمحتوى

استخدم SHA-256. تستخدم Git وDocker وIPFS جميعها التخزين المعنون بالمحتوى حيث تعمل تجزئة المحتوى كعنوانه. يوفر SHA-256 مقاومة تصادم كافية لضمان التفرد عبر مليارات الكائنات.

معايير الأداء

سرعة التجزئة النسبية على معالج x86-64 حديث (أعلى = أسرع):

الخوارزميةالإنتاجية (ميجابايت/ثانية)السرعة النسبية
MD5~3,2001.0x (خط الأساس)
SHA-1~2,4000.75x
SHA-256~1,5000.47x
SHA-512~2,1000.66x

ملاحظة: SHA-512 أسرع من SHA-256 على معالجات 64 بت بسبب حالته الداخلية الأوسع. على الأنظمة 32 بت، ينعكس الوضع. لمعظم التطبيقات، فرق السرعة غير مهم — تجزئة ملف 1 ميجابايت تستغرق أقل من 1 ميلي ثانية مع أي من هذه الخوارزميات.

أخطاء شائعة يجب تجنبها

1. استخدام MD5 للأمان

تصادمات MD5 سهلة التوليد. لا تستخدم أبداً MD5 للتوقيعات الرقمية أو التحقق من الشهادات أو أي سيناريو قد يصنع فيه مهاجم مدخلات خبيثة.

2. تجزئة كلمات المرور بـ SHA-256

SHA-256 ليس تجزئة كلمات مرور. إنه سريع جداً، بدون ملح مدمج، ومعرض لجداول قوس قزح وهجمات القوة الغاشمة المعجلة بـ GPU. استخدم Argon2id أو bcrypt. لفهم السبب، راجع دليلنا حول إنتروبيا كلمة المرور — يشرح الرياضيات وراء مقاومة القوة الغاشمة.

3. افتراض أن طول التجزئة يساوي الأمان

تجزئة 512 بت ليست تلقائياً “أكثر أماناً” من تجزئة 256 بت لمقاومة التصادم. هامش أمان SHA-256 (مقاومة تصادم 128 بت) هو بالفعل أبعد بكثير من قدرة القوة الغاشمة. اختر بناءً على متطلباتك الفعلية، وليس طول التجزئة.

4. ابتكار مجموعات تجزئة خاصة بك

أنماط مثل SHA256(MD5(data)) أو MD5(data + salt) لا تصلح سحرياً خوارزمية مكسورة. استخدم خوارزمية واحدة موثوقة (SHA-256) أو بناء مناسب (HMAC) بدلاً من ذلك.

جرّبه بنفسك

أنشئ وقارن تجزئات MD5 وSHA-1 وSHA-256 وSHA-512 فوراً باستخدام مولد التجزئة — الصق نصاً أو أسقط ملفاً وشاهد جميع الملخصات الأربعة جنباً إلى جنب. 100% في متصفحك، لا تغادر بياناتك جهازك أبداً.

للاطلاع على نظرة أوسع على أمان الويب بما في ذلك المصادقة والتحقق من المدخلات ورؤوس الأمان، اقرأ دليل أساسيات أمان الويب. يمكنك أيضاً استكشاف جميع أدوات المطورين الأساسية للترميز والتجزئة وتحويل البيانات.

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

هل MD5 لا يزال آمناً للمجاميع التدقيقية؟

MD5 آمن لاكتشاف تلف الملفات العرضي — إذا تلف ملف أثناء التحميل، ستتغير تجزئة MD5 بشكل شبه مؤكد. ومع ذلك، MD5 ليس آمناً ضد التلاعب المتعمد لأن المهاجم يمكنه صنع ملف معدل بنفس تجزئة MD5. للتحقق من السلامة حيث الخصوم مصدر قلق (مثل توزيع البرمجيات)، استخدم SHA-256 بدلاً من ذلك.

كم هو أبطأ SHA-256 مقارنة بـ MD5؟

SHA-256 أبطأ بنحو ضعفين من MD5 في الإنتاجية الخام. على الأجهزة الحديثة، يُجزئ MD5 بنحو 3,200 ميجابايت/ثانية بينما يُجزئ SHA-256 بنحو 1,500 ميجابايت/ثانية. عملياً، هذا الفرق ضئيل لمعظم التطبيقات — تجزئة ملف 100 ميجابايت تستغرق نحو 70 ميلي ثانية مع SHA-256. فجوة الأداء تهم فقط لسيناريوهات الإنتاجية العالية جداً مثل فحص حزم الشبكة أو إزالة التكرار في التخزين على نطاق واسع.

هل يجب أن أستخدم SHA-256 أم SHA-512 لتطبيقي؟

استخدم SHA-256 لمعظم التطبيقات — يوفر مقاومة تصادم 128 بت، وهو أبعد بكثير من قدرة القوة الغاشمة. اختر SHA-512 إذا: (أ) منصتك 64 بت وتحتاج أقصى إنتاجية، (ب) مواصفات أو متطلبات امتثال تفرضه، أو (ج) تريد هامش أمان أكبر لسلامة البيانات طويلة المدى. الطول الإضافي لتجزئة SHA-512 يضاعف التخزين ونادراً ما يكون ضرورياً.

هل يمكن كسر أو عكس SHA-256؟

لا يمكن عكس SHA-256 — إنها دالة أحادية الاتجاه. حتى 2026، لا توجد هجمات استباق صورة أو تصادم عملية ضد SHA-256. أفضل هجوم معروف يتطلب 2^128 عملية للتصادمات، وهو مستحيل حسابياً مع التكنولوجيا الحالية أو المنظورة. SHA-256 معتمد من NIST ويُستخدم في البنية التحتية الحرجة بما في ذلك TLS وBitcoin والأنظمة الفيدرالية.

لماذا لا تزال بعض الأنظمة تستخدم MD5 إذا كان مكسوراً؟

التوافق مع الأنظمة القديمة هو السبب الرئيسي. صُممت العديد من الأنظمة والبروتوكولات وتنسيقات الملفات الموجودة حول MD5 قبل اكتشاف نقاط ضعفه. الانتقال بعيداً يتطلب تغييرات منسقة عبر جميع المكونات. للاستخدامات غير الأمنية مثل مفاتيح التخزين المؤقت وإزالة التكرار، فإن ميزة السرعة والمخرجات الأقصر لـ MD5 تجعله خياراً عملياً حيث لا تشكل هجمات التصادم مصدر قلق.

مقالات ذات صلة

عرض جميع المقالات