MD5 অ্যালগরিদমের কাজ করার ধাপসমূহ
মেসেজ ডাইজেস্ট গণনা করার জন্য নিচের ধাপগুলো অনুসরণ করা হয়:
ধাপ ১: প্যাডিং বিট যোগ করা (Append padding bits)
মেসেজটি এমনভাবে বাড়ানো হয় যাতে এর মোট দৈর্ঘ্য বিটে ৪৪৮ মডুলো ৫১২ এ সম্মত (congruent) হয়। মেসেজের দৈর্ঘ্য ইতিমধ্যেই ৪৪৮ মডুলো ৫১২ হলেও প্যাডিং করা হয়। ৪৪৮ + ৬৪ = ৫১২, সুতরাং মেসেজ এভাবে প্যাড করা হয় যাতে এর দৈর্ঘ্য ৫১২-র পূর্ণসংখ্যা গুণ থেকে ৬৪ বিট কম হয়।
ধাপ ২: দৈর্ঘ্য যোগ করা (Append length)
মূল মেসেজ M-এর দৈর্ঘ্য (প্যাডিং বিট যোগ করার আগে) বিটে একটি ৬৪-বিট রিপ্রেজেন্টেশন (অনসাইনড ৬৪-বিট ইন্টিজার, মোস্ট সিগনিফিক্যান্ট বাইট প্রথম) ধাপ ১-র ফলাফলে যোগ করা হয়। যদি মূল মেসেজের দৈর্ঘ্য ২⁶⁴-র চেয়ে বড় হয়, তবে শুধু লো-অর্ডার ৬৪ বিট ব্যবহার করা হয়। ফলাফলে মেসেজের দৈর্ঘ্য ৫১২ বিটের পূর্ণসংখ্যা গুণ হয়।
ধাপ ৩: MD বাফার ইনিশিয়ালাইজ করা (Initialize MD Buffer)
১২৮-বিট বাফার ব্যবহার করা হয় ইন্টারমিডিয়েট ও চূড়ান্ত MD5 হ্যাশ ফলাফল ধারণের জন্য। চারটি ওয়ার্ড বাফার (A, B, C, D) মেসেজ ডাইজেস্ট গণনার জন্য। প্রতিটি A, B, C, D ৩২-বিট রেজিস্টার। এই রেজিস্টারগুলো নিচের হেক্সাডেসিমেল মান দিয়ে ইনিশিয়ালাইজ করা হয় (লো-অর্ডার বাইট প্রথম):
Word A: 01 23 45 67 Word B: 89 ab cd ef Word C: fe dc ba 98 Word D: 76 54 32 10
ধাপ ৪: ৫১২-বিট (১৬-ওয়ার্ড) ব্লকে মেসেজ প্রসেস করা (Process message in 512-bit blocks)
কমপ্রেশন ফাংশনে চারটি রাউন্ড প্রসেসিং থাকে। প্রতিটি রাউন্ডে বর্তমান ৫১২-বিট ব্লক (Yq) এবং ১২৮-বিট বাফার মান ABCD ইনপুট হিসেবে নেয়া হয় এবং বাফারের উপাদান আপডেট হয়। চারটি অক্সিলিয়ারি ফাংশন সংজ্ঞায়িত করা হয় যারা তিনটি ৩২-বিট ওয়ার্ড ইনপুট নেয় এবং একটা ৩২-বিট ওয়ার্ড আউটপুট দেয়:
F (X, Y, Z) = XY v not(X) Z G (X, Y, Z) = XZ v Y not(Z) H (X, Y, Z) = X xor Y xor Z I (X, Y, Z) = Y xor (X v not(Z))
প্রতিটি বিট পজিশনে F কন্ডিশনাল হিসেবে কাজ করে: If X then Y else Z।
ধাপ ৫: আউটপুট (Output)
মেসেজ ডাইজেস্ট আউটপুট হিসেবে A, B, C, D দিয়ে। চূড়ান্ত রাউন্ড থেকে আউটপুট হচ্ছে ১২৮-বিট হ্যাশ ফলাফল বা মেসেজ ডাইজেস্ট যা সকল tটি ৫১২-বিট ব্লক প্রসেস করার পর প্রাপ্ত হয়।