مولد Hash MD5
توليد hash MD5 من أي نص
النص المُدخل
Hash MD5
سيظهر hash MD5 هنا…
ما هو تجزئة MD5؟
MD5 (Message-Digest Algorithm 5) هي دالة تجزئة تشفيرية تنتج ملخصًا ثابتًا بحجم 128 بت (16 بايت) من أي مدخل بصرف النظر عن حجمه. نُشرت عام 1992 على يد Ronald Rivest بموجب RFC 1321، وصُمِّمت لتكون خلفًا أسرع لـ MD4، وسرعان ما أصبحت من أكثر دوال التجزئة استخدامًا على الإنترنت. تُعالج الخوارزمية المدخلات في كتل بحجم 512 بت عبر أربع جولات من 16 عملية لكل منها، مستخدمةً دالة لاخطية مختلفة في كل جولة، لتنتج بصمة سداسية عشرية مؤلفة من 32 حرفًا.
دالة التجزئة هي تحويل أحادي الاتجاه: بمعرفة المدخل يمكنك حساب التجزئة فورًا، لكن بمعرفة التجزئة وحدها لا يمكنك استعادة المدخل الأصلي. حتى تغيير بت واحد في المدخل ينتج ملخصًا مختلفًا تمامًا — وهي خاصية تُعرف بتأثير الانهيار الجليدي (Avalanche Effect). يُعيّن MD5 فضاءً لا نهائيًا من المدخلات إلى فضاء مخرجات ثابت بحجم 128 بت، لذا فإن التصادمات (مدخلان مختلفان ينتجان نفس التجزئة) مضمونة رياضيًا، غير أن دالة التجزئة الآمنة تجعل إيجادها أمرًا متعذرًا حسابيًا.
منذ عام 2004، أثبت الباحثون إمكانية تنفيذ هجمات تصادم عملية ضد MD5، مما يعني أنها لم تعد تُعدّ آمنة للتواقيع الرقمية أو الشهادات أو أي سياق يتطلب مقاومة التصادم. بيد أن MD5 لا يزال مستخدمًا على نطاق واسع لأغراض غير أمنية: التحقق من سلامة الملفات بعد التنزيل، وتوليد مفاتيح ذاكرة التخزين المؤقت (cache keys)، وإزالة تكرار المحتوى، وإنشاء معرّفات حتمية من النصوص. لهذه التطبيقات تجعل سرعة الخوارزمية ودعم المكتبات لها على نطاق واسع خيارًا عمليًا. في عام 2008، نشر Marc Stevens وزملاؤه هجوم تصادم ببادئة مختارة (chosen-prefix collision attack)، أي أن المهاجم يمكنه صياغة وثيقتين بأي بادئتين مختلفتين تتشاركان نفس الملخص. جرى إثبات هذه التقنية في مؤتمر Chaos Communication Congress عام 2008 من خلال بناء شهادة سلطة تصديق (CA) مزيفة. استغلت برمجية Flame الخبيثة عام 2012 تصادمات البادئة المختارة لتزوير شهادة توقيع كود Microsoft، مما أتاح لها التنكر في هيئة حزمة تحديث Windows شرعية. أكدت هذه الاستغلالات الواقعية أن الخوارزمية معطوبة تشفيريًا في أي استخدام يعتمد على الثقة، ولا ينبغي الاعتماد عليها حين يكون بإمكان المهاجم التأثير على المدخلات التي تُجزَّأ.
لماذا تستخدم مولد MD5 هذا؟
ولّد hash MD5 فورًا دون تثبيت أي شيء أو كتابة أي كود. الصق نصك واحصل على الملخص السداسي العشري المؤلف من 32 حرفًا في الوقت الفعلي.
حالات استخدام MD5
MD5 مقارنةً بخوارزميات التجزئة الأخرى
MD5 هو الأسرع والأقصر بين خوارزميات التجزئة الشائعة، لكنه يوفر أضعف ضمانات الأمان. يقارن الجدول أدناه أحجام الملخصات والمعايير وحالات الاستخدام المناسبة لكل خوارزمية.
| الخوارزمية | حجم الملخص | طول Hex | المعيار | الأنسب لـ |
|---|---|---|---|---|
| MD5 | 128 bits | 32 hex chars | 1992 / RFC 1321 | Checksums, non-security fingerprints |
| SHA-1 | 160 bits | 40 hex chars | 1995 / RFC 3174 | Legacy git commits (being replaced) |
| SHA-256 | 256 bits | 64 hex chars | 2001 / FIPS 180-4 | TLS certificates, blockchain, JWTs |
| SHA-384 | 384 bits | 96 hex chars | 2001 / FIPS 180-4 | Government systems, higher security margin |
| SHA-512 | 512 bits | 128 hex chars | 2001 / FIPS 180-4 | Digital signatures, HMAC with large keys |
| SHA-3 | 256 bits | 64 hex chars | 2015 / FIPS 202 | Post-quantum readiness, backup standard |
| BLAKE3 | 256 bits | 64 hex chars | 2020 | High-performance checksums, Merkle trees |
كيف يعمل MD5؟
يُعالج MD5 المدخلات عبر بنية Merkle-Damgård: يُحشى الرسالة لتكون مضاعفًا لـ 512 بت، وتُقسَّم إلى كتل، وتُمرَّر كل كتلة عبر أربع جولات من 16 عملية حسابية بتية تمزج المدخلات مع ثوابت مشتقة من الجيب التمام. والنتيجة حالة 128 بت تصبح الملخص النهائي.
تطبّق كل جولة دالة مساعدة لاخطية مميزة على ثلاثة من متغيرات الحالة الأربعة بحجم 32 بت (A، B، C، D). الجولة الأولى تستخدم F(B,C,D) = (B AND C) OR (NOT B AND D) — محدد شرطي بتي. الجولة الثانية تستخدم G(B,C,D) = (B AND D) OR (C AND NOT D) — محدد تكميلي. الجولة الثالثة تستخدم H(B,C,D) = B XOR C XOR D — دالة تعادل. الجولة الرابعة تستخدم I(B,C,D) = C XOR (B OR NOT D) — مُجمِّع غير متماثل. تضمن هذه الدوال الأربع تأثير كل بت من المدخل في ملخص المخرج، مما ينتج تأثير الانهيار الجليدي الذي يجعل التغييرات الصغيرة في المدخل تُحدث تغييرات كبيرة وغير متوقعة في التجزئة الناتجة.
MD5: 5eb63bbbe01eeed093cb22bb8f5acdc3
(128 bits = 16 bytes = 32 hex characters)
تسير الخوارزمية في خمس مراحل: (1) إلحاق بت '1' ثم أصفار حتى يصبح طول الرسالة 448 mod 512؛ (2) إلحاق طول الرسالة الأصلية كعدد صحيح 64 بت بترتيب little-endian؛ (3) تهيئة أربعة متغيرات حالة بحجم 32 بت (A، B، C، D) بثوابت ثابتة؛ (4) معالجة كل كتلة 512 بت عبر 64 عملية باستخدام أربع دوال لاخطية (F، G، H، I)، دالة واحدة لكل جولة من 16 عملية؛ (5) إضافة الحالة الناتجة إلى المجموع الجاري وإخراج التجزئة النهائية بحجم 128 بت بترتيب little-endian للبايت.
أمثلة على الكود
كيفية توليد hash MD5 في اللغات والبيئات الشائعة. لاحظ أن MD5 غير متاح في واجهة Web Crypto API للمتصفح — استخدم مكتبة أو Node.js.
// MD5 is not available in Web Crypto API (it only supports SHA-*)
// Use a library like 'js-md5' or the Node.js crypto module
// Node.js (built-in crypto)
const crypto = require('crypto')
const hash = crypto.createHash('md5').update('hello world').digest('hex')
console.log(hash) // → "5eb63bbbe01eeed093cb22bb8f5acdc3"
// With Unicode input
crypto.createHash('md5').update('cafe\u0301').digest('hex')
// → "4fad076bae205e95bec9dacea498e2ab"import hashlib
# Basic MD5 hash
result = hashlib.md5(b'hello world').hexdigest()
print(result) # → "5eb63bbbe01eeed093cb22bb8f5acdc3"
# Hash a string (must encode to bytes first)
text = 'hello world'
hashlib.md5(text.encode('utf-8')).hexdigest()
# → "5eb63bbbe01eeed093cb22bb8f5acdc3"
# Hash a file
with open('file.bin', 'rb') as f:
md5 = hashlib.md5()
for chunk in iter(lambda: f.read(8192), b''):
md5.update(chunk)
print(md5.hexdigest())package main
import (
"crypto/md5"
"fmt"
)
func main() {
data := []byte("hello world")
hash := md5.Sum(data)
fmt.Printf("%x\n", hash)
// → 5eb63bbbe01eeed093cb22bb8f5acdc3
}# Using md5sum (Linux) or md5 (macOS) echo -n "hello world" | md5sum # → 5eb63bbbe01eeed093cb22bb8f5acdc3 - # macOS echo -n "hello world" | md5 # → 5eb63bbbe01eeed093cb22bb8f5acdc3 # Hash a file md5sum package.json # → a1b2c3d4e5f6... package.json # Using openssl (cross-platform) echo -n "hello world" | openssl md5 # → MD5(stdin)= 5eb63bbbe01eeed093cb22bb8f5acdc3