Sir, I need some help in implementing MD5(Message Digest 5) algorithm in my project.
I have referred the pseudo code in the Wikipedia article
https://en.wikipedia.org/wiki/MD5[
^]
and implemented this code
#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_WARNINGS
using namespace std;
class md5
{
public:
void messageDigest()
{
unsigned long int s[64] = { 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22,5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20,4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23,6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21 };
unsigned long int k[64] = { 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee,0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501,0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be,0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821,0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa,0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8,0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed,0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed,0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c,0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70,0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05,0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665,0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039,0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1,0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1,0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391 };
unsigned long int a0, b0, c0, d0;
a0 = 0x67452301;
b0= 0xefcdab89;
c0= 0x98badcfe;
d0= 0x10325476;
unsigned long int F, G, H, I;
unsigned long int A, B, C, D;
A = a0;
B = b0;
C = c0;
D = d0;
int i = 0;
int g;
if(0<=i<=15)
{
F = (B&&C) || ((!C) && D);
g = i;
}
else if (16 <= i <= 31)
{
F = (D&&B) || ((!D) && C);
g = (5 * i + 1) % 16;
}
else if (32 <= i <= 47)
{
F = B^C^D;
g = (3 * i + 5) % 16;
}
else if (48 <= i <= 63)
{
F = C ^ (B || (!D));
g = (7 * i) % 16;
}
int temp; temp = D;
D = C;
C = B;
A = temp;
a0 = a0 + A;
b0 = b0 + B;
c0 = c0 + C;
I specifically face problem here in the pseudo code of the Wikipedia article:
append "1" bit to message
and here
end for
var char digest[16] := a0 append b0 append c0 append d0
leftrotate (x, c)
return (x << c) binary or (x >> (32-c));
other parts of codes,I think I have done it correctly.
Kindly help me with this.