Follow us on Twitter!
Things are more like they are now than they have ever been before. - Dwight D. Eisenhower
Thursday, April 24, 2014
Navigation
Home
HellBoundHackers Main:
HellBoundHackers Find:
HellBoundHackers Information:
Learn
Communicate
Submit
Shop
Challenges
HellBoundHackers Exploit:
HellBoundHackers Programming:
HellBoundHackers Think:
HellBoundHackers Track:
HellBoundHackers Patch:
HellBoundHackers Other:
HellBoundHackers Need Help?
Other
Members Online
Total Online: 19
Guests Online: 18
Members Online: 1

Registered Members: 82889
Newest Member: Geriztul
Latest Articles
View Thread

HellBound Hackers | Computer General | Programming

Author

MD5 hash - help


Member

Your avatar

Posts:
Location:
Joined: 01.01.70
Rank:
Guest
Posted on 04-08-10 22:43
So im trying to program a md5 hash algoritham in C in as simple way as possible , but i just cant get the right result, so if anyone has the time and the pacience to go thrugh my code.

the algoritham is working but i just cant seem to get the right md5 sum

since im simplyfying it(this is my first crack at such a thing), the algorithm is only taking 64byte of data and returning a pointer to hash

[CODE]

typedef unsigned int INT ;

unsigned int t[] = {
0xd76aa478L, /* 1 */
.
.
.
.
the sinus results copied from the net
.
.
.
0xbd3af235L, /* 62 */
0x2ad7d2bbL, /* 63 */
0xeb86d391L /* 64 */
};

unsigned int r[] = { 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 int leftrotate(INT x,INT c){

return (x << c) | (x >> (32-c));
}

unsigned char * md5(unsigned char *input){

unsigned char buff[64];

INT len=strlen((char *)input),w[16],stat[4],f,a,b,c,d,g,i,j,temp;

bzero((char *)buff,sizeof(buff));

for(i=0;i<len && i<59;i++){

buff[i]=input[i];
}

if(len<59){ buff[len]=0x80; len*=8;}
else { buff[59]=0x80; len=59*8; }

for(i=0;i<4;i++){

buff[i+60]=len >> (24 - i*8);
}

for(i=0,j=0;i<16;i++,j+=4){


w[i]=0;
w[i]=(((INT)buff[j]<< 24) | ((INT)buff[j+1]<<16) | ((INT)buff[j+2] << 8) | ((INT)buff[j+3]));

}

stat[0]=0x01234567;
stat[1]=0x89abcdef;
stat[2]=0xfedcba98;
stat[3]=0x76543210;


a=stat[0];
b=stat[1];
c=stat[2];
d=stat[3];

for(i=0;i<64;i++){

if (0 <= i && i<= 15 ){
f = (b & c) | ((~ b) & d);
g = i;
}else if (16 <= i && i<= 31){
f = (d & b) | ((~ d) & c);
g = (5*i + 1) % 16;
}else if (32 <= i && i<= 47){
f = b ^ c ^ d;
g = (3*i + 5) % 16;
}else if (48 <= i && i<= 63){
f = c ^ (b | (~ d));
g = (7*i) % 16;
}

temp = d;
d = c;
c = b;
b = b + leftrotate((a + f + t[i] + w[g]) , r[i]);
a = temp;

}

stat[0]=a + stat[0];
stat[1]=b + stat[1];
stat[2]=c + stat[2];
stat[3]=d + stat[3];


for(i=0;i<4;i++){

printf("%02x",stat[i]);

}

return input;
}[/CODE]

thanks


Author

RE: MD5 hash - help


Member

Your avatar

Posts:
Location:
Joined: 01.01.70
Rank:
Guest
Posted on 06-08-10 12:37
never mind, got it


Author

RE: MD5 hash - help

spyware
Member



Posts: 4192
Location:
Joined: 14.04.07
Rank:
God
Warn Level: 90
Posted on 06-08-10 15:57
mestar wrote:
never mind, got it


Can you post a diff with your broken code and the new, fixed one?



img507.imageshack.us/img507/3580/spynewsig3il1.png
"The chowner of property." - Zeph
[small]
Widespread intellectual and moral docility may be convenient for leaders in the short term,
but it is suicidal for nations in the long term.
- Carl Sagan
[center]�Since the grid is inescapable, what were the earlier lasers about? Does the corridor have a sense of humor?� - Ebert[/ce
Author

RE: MD5 hash - help


Member

Your avatar

Posts:
Location:
Joined: 01.01.70
Rank:
Guest
Posted on 06-08-10 16:56
spyware wrote:

Can you post a diff with your broken code and the new, fixed one?


no problem, i can post the fix, but i really dont wona go throu the mistakes, basiclly the problem was the endian, and while transforming data from int to char and vice versa it got a bit f... up

so anyway here is the working code, you can compere with the code above, to see the mistakes

the function doesnt return anything just prints the hash

Code


typedef unsigned int INT ;

unsigned int t[] = {
0xd76aa478L, /* 1 */
0xe8c7b756L, /* 2 */
0x242070dbL, /* 3 */
0xc1bdceeeL, /* 4 */
0xf57c0fafL, /* 5 */
0x4787c62aL, /* 6 */
0xa8304613L, /* 7 */
0xfd469501L, /* 8 */
0x698098d8L, /* 9 */
0x8b44f7afL, /* 10 */
0xffff5bb1L, /* 11 */
0x895cd7beL, /* 12 */
0x6b901122L, /* 13 */
0xfd987193L, /* 14 */
0xa679438eL, /* 15 */
0x49b40821L, /* 16 */
0xf61e2562L, /* 17 */
0xc040b340L, /* 18 */
0x265e5a51L, /* 19 */
0xe9b6c7aaL, /* 20 */
0xd62f105dL, /* 21 */
0x02441453L, /* 22 */
0xd8a1e681L, /* 23 */
0xe7d3fbc8L, /* 24 */
0x21e1cde6L, /* 25 */
0xc33707d6L, /* 26 */
0xf4d50d87L, /* 27 */
0x455a14edL, /* 28 */
0xa9e3e905L, /* 29 */
0xfcefa3f8L, /* 30 */
0x676f02d9L, /* 31 */
0x8d2a4c8aL, /* 32 */
0xfffa3942L, /* 33 */
0x8771f681L, /* 34 */
0x6d9d6122L, /* 35 */
0xfde5380cL, /* 36 */
0xa4beea44L, /* 37 */
0x4bdecfa9L, /* 38 */
0xf6bb4b60L, /* 39 */
0xbebfbc70L, /* 40 */
0x289b7ec6L, /* 41 */
0xeaa127faL, /* 42 */
0xd4ef3085L, /* 43 */
0x04881d05L, /* 44 */
0xd9d4d039L, /* 45 */
0xe6db99e5L, /* 46 */
0x1fa27cf8L, /* 47 */
0xc4ac5665L, /* 48 */
0xf4292244L, /* 49 */
0x432aff97L, /* 50 */
0xab9423a7L, /* 51 */
0xfc93a039L, /* 52 */
0x655b59c3L, /* 53 */
0x8f0ccc92L, /* 54 */
0xffeff47dL, /* 55 */
0x85845dd1L, /* 56 */
0x6fa87e4fL, /* 57 */
0xfe2ce6e0L, /* 58 */
0xa3014314L, /* 59 */
0x4e0811a1L, /* 60 */
0xf7537e82L, /* 61 */
0xbd3af235L, /* 62 */
0x2ad7d2bbL, /* 63 */
0xeb86d391L  /* 64 */
};

unsigned int r[] =    {   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 int leftrotate(INT x,INT c){

   return (x << c) | (x >> (32-c));
}

unsigned char * md5(unsigned char *input){

   unsigned char output[16],buff[64];

   INT len=strlen((char *)input),w[16],stat[4],f,a,b,c,d,g,i,j,temp;

   bzero((char *)buff,sizeof(buff));

   for(i=0;i<len && i<55;i++){

      buff[i]=input[i];
   }

   if(len<55){ buff[len]=0x80;  len*=8;}
   else { buff[55]=0x80; len=55*8; }

   for(i=0;i<4;i++){

      buff[i+56]=len >> (i*8);
   }

   for(i=0,j=0;i<16;i++,j+=4){
      

      w[i]=0;
      w[i]=(((INT)buff[j]) | ((INT)buff[j+1]<<8) | ((INT)buff[j+2] << 16) | ((INT)buff[j+3]<<24));

   }

   stat[0]=0x67452301;
   stat[1]=0xefcdab89;
   stat[2]=0x98badcfe;
   stat[3]=0x10325476;

   a=stat[0];
   b=stat[1];
   c=stat[2];
   d=stat[3];

   for(i=0;i<64;i++){

      if (0 <= i && i<= 15 ){
         f = (b & c) | ((~ b) & d);
         g = i;
      }else if (16 <= i && i<= 31){
         f = (d & b) | ((~ d) & c);
         g = (5*i + 1) % 16;
      }else if (32 <= i && i<= 47){
         f = b ^ c ^ d;
         g = (3*i + 5) % 16;
      }else if (48 <= i && i<= 63){
         f = c ^ (b | (~ d));
         g = (7*i) % 16;
      }

      temp = d;
         d = c;
         c = b;
         b = b + leftrotate((a + f + t[i] + w[g]) , r[i]);
         a = temp;

   }

   stat[0]=a + stat[0];
   stat[1]=b + stat[1];
   stat[2]=c + stat[2];
   stat[3]=d + stat[3];

   for(i=0,j=0;j<16;i++,j+=4){

      output[j]=(unsigned char)( stat[i]);
      output[j+1]=(unsigned char)( stat[i]>>8);
      output[j+2]=(unsigned char)( stat[i]>>16);
      output[j+3]=(unsigned char)(stat[i]>>24);
   }
   bzero(out,sizeof(out));
   for(i=0,j=0;j<16;i+=2,j++){
      printf(&out[i],"%02x",output[j]);
   }

return ;
}





keep in mind this only works with string up to 55 bytes, it cant give you a hash of a file , it just gives you a hash of a single string

but you can extend it to work with all the sizes, it will just take a small amount of coding




Edited by on 06-08-10 17:01
Author

RE: MD5 hash - help

spyware
Member



Posts: 4192
Location:
Joined: 14.04.07
Rank:
God
Warn Level: 90
Posted on 06-08-10 17:16
Good thread status achieved.

Have some community points



img507.imageshack.us/img507/3580/spynewsig3il1.png
"The chowner of property." - Zeph
[small]
Widespread intellectual and moral docility may be convenient for leaders in the short term,
but it is suicidal for nations in the long term.
- Carl Sagan
[center]�Since the grid is inescapable, what were the earlier lasers about? Does the corridor have a sense of humor?� - Ebert[/ce