Có các bước sau được thực hiện để tính message digest của tin nhắn:
- Bước 1 - Thêm bit đệm (Append padding bits) - Tin nhắn được tiếp tục hoặc đệm theo cách mà tổng độ dài của nó tính bằng bit đồng dư với 448 modulo 512. Phép toán này luôn được thực hiện ngay cả khi độ dài tin nhắn tính bằng bit ban đầu đồng dư với 448 modulo 512. 448 + 64 = 512, do đó tin nhắn được đệm sao cho độ dài của nó bây giờ là 64 bit nhỏ hơn bội số nguyên của 512.
- Bước 2 - Thêm độ dài (Append length) - Mô tả 64 bit của độ dài tính bằng bit của tin nhắn gốc M (trước khi bit đệm được chèn) được thêm vào kết quả của bước 1. Nếu độ dài tin nhắn gốc lớn hơn 264 = 18 446 744 073 709 551 616, do đó chỉ 64 bit thấp của độ dài tin nhắn M được sử dụng.
Do đó, trường chứa độ dài tin nhắn gốc M modulo 264. Các bit này được thêm như hai từ 32 bit và thêm từ thấp thứ tự (least significant) trước. Kết quả của bước 1 và bước 2 là tin nhắn với độ dài tính bằng bit là bội số nguyên của 512 bit.
- Bước 3 - Khởi tạo MD Buffer - Bộ đệm 128-bit có thể được dùng để giữ kết quả trung gian và cuối cùng của thuật toán băm MD5. Bộ đệm bốn từ (A, B, C, và D) có thể được dùng để đánh giá message digest. Do đó, mỗi A, B, C, D là thanh ghi 32-bit.
Các thanh ghi này được khởi tạo thành các giá trị sau trong hexadecimal, byte thấp thứ tự trước:
Word A: 01 23 45 67
Word B: 89 ab cd ef
Word C: fe dc ba 98
Word D: 76 54 32 10
- Bước 4 - Xử lý tin nhắn trong khối 512 bit (16 từ) - Hàm nén bao gồm bốn vòng xử lý. Mỗi vòng tạo đầu vào khối 512-bit hiện tại đang được xử lý (Yq) và giá trị bộ đệm 128-bit ABCD và cập nhật thành phần bộ đệm.
Có thể mô tả bốn hàm phụ trợ mà mỗi hàm lấy đầu vào ba từ 32-bit và tạo đầu ra một từ 32-bit.
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))
Trong mỗi vị trí bit, F hoạt động như điều kiện: Nếu X thì Y ngược lại Z. Hàm F có thể được biểu diễn sử dụng + thay vì v vì XY và not X(Z) sẽ không bao giờ có 1 trong cùng vị trí bit.
- Bước 5 - Đầu ra (Output) - Message digest tạo đầu ra bao gồm A, B, C, D. Đầu ra từ vòng cuối cùng là kết quả băm 128-bit hoặc message digest có được sau khi đã xử lý tăng dần tất cả t khối 512-bit của tin nhắn.