संदेश के संदेश डाइजेस्ट की गणना करने के लिए निम्नलिखित चरण किए जाते हैं:
- चरण 1 - पैडिंग बिट्स जोड़ें - संदेश को इस तरह जारी रखा या पैड किया जाता है कि बिट्स में इसकी कुल लंबाई 448 मॉड्यूलो 512 के अनुरूप है। यह ऑपरेशन लगातार लागू किया जाता है भले ही संदेश की बिट्स में लंबाई मूल रूप से 448 मॉड्यूलो 512 के अनुरूप हो। 448 + 64 = 512, इसलिए संदेश को इस तरह पैड किया जाता है कि इसकी लंबाई अब 512 के पूर्णांक गुणक से 64 बिट कम है।
- चरण 2 - लंबाई जोड़ें - मूल संदेश M की लंबाई का 64-बिट विवरण (पैडिंग बिट्स जोड़े जाने से पहले) चरण 1 के परिणाम में जोड़ा जाता है। यदि मूल संदेश की लंबाई 2^64 से अधिक है, तो केवल संदेश M की लंबाई के निम्न-क्रम 64 बिट्स का उपयोग किया जाता है। इसलिए, फ़ील्ड में मूल संदेश M की लंबाई मॉड्यूलो 2^64 शामिल होती है। ये बिट्स दो 32-बिट शब्दों के रूप में जोड़े जाते हैं और निम्न-क्रम (कम से कम महत्वपूर्ण) शब्द पहले जोड़ा जाता है। चरण 1 और चरण 2 का परिणाम बिट्स में एक संदेश है जिसकी लंबाई 512 बिट्स का पूर्णांक गुणक है।
- चरण 3 - MD बफर प्रारंभ करें - MD5 हैश एल्गोरिदम के मध्यवर्ती और अंतिम परिणाम को रखने के लिए 128-बिट बफर का उपयोग किया जा सकता है। संदेश डाइजेस्ट का मूल्यांकन करने के लिए चार-शब्द बफर (A, B, C, और D) का उपयोग किया जा सकता है। इसलिए, प्रत्येक A, B, C, D एक 32-बिट रजिस्टर है। इन रजिस्टरों को हेक्साडेसिमल में निम्न मानों पर बूट किया जाता है, निम्न-क्रम बाइट्स पहले:
- शब्द A: 01 23 45 67
- शब्द B: 89 ab cd ef
- शब्द C: fe dc ba 98
- शब्द D: 76 54 32 10
- चरण 4 - 512 बिट (16-शब्द) ब्लॉक में संदेश संसाधित करें - एक संपीड़न फ़ंक्शन में प्रसंस्करण के चार राउंड शामिल हैं। प्रत्येक राउंड वर्तमान 512-बिट ब्लॉक को संसाधित किए जा रहे (Yq) और 128-बिट बफर मान ABCD को इनपुट के रूप में लेता है और बफर के तत्व को अपडेट करता है। चार सहायक फ़ंक्शन वर्णित किए जा सकते हैं जो प्रत्येक तीन 32-बिट शब्दों को इनपुट के रूप में लेते हैं और आउटपुट के रूप में एक 32-बिट शब्द उत्पन्न करते हैं:
- 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 सशर्त के रूप में कार्य करता है: यदि X तो Y अन्यथा Z। फ़ंक्शन F को + का उपयोग करके v के बजाय दर्शाया जा सकता है क्योंकि XY और not X(Z) कभी भी समान बिट स्थिति में 1 नहीं होंगे।
- चरण 5 - आउटपुट - संदेश डाइजेस्ट A, B, C, D सहित एक आउटपुट उत्पन्न करता है। अंतिम राउंड से आउटपुट 128-बिट हैश परिणाम या संदेश डाइजेस्ट है जिसे सभी t 512-बिट ब्लॉकों को उत्तरोत्तर संसाधित करने के बाद प्राप्त किया जा सकता है।