⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 md5.cpp

📁 QQ的MD5加密算法,有要的可以要的下下来玩玩!
💻 CPP
字号:

#include "stdio.h"
#include "string.h"
#include "stdlib.h"


typedef unsigned int UINT; 

UINT F(UINT X,UINT Y,UINT Z) //f 子函数
{
	return (X&Y)|((~X)&Z);
}
UINT G(UINT X,UINT Y,UINT Z) //g 子函数
{
return (X&Z)|(Y&(~Z));
}
UINT H(UINT X,UINT Y,UINT Z) //h 子函数
{
	return X^Y^Z;
};
UINT I(UINT X,UINT Y,UINT Z) //i 子函数
{
	return Y^(X|(~Z));
}
UINT ROTATE_LEFT(UINT x, UINT s)
{

     return ((x << s) | (x >> (32 - s)));

}

void FF(UINT &a, UINT b, UINT c, UINT d, UINT mj, UINT s, UINT ti)
{

     a += F(b, c, d) + mj + ti;

     a =  ROTATE_LEFT(a, s);

     a += b;
}
void GG(UINT &a, UINT b, UINT c, UINT d, UINT mj, UINT s, UINT ti)
{

     a += G(b, c, d) + mj + ti;

     a =  ROTATE_LEFT(a, s);

     a += b;
}
void HH(UINT &a, UINT b, UINT c, UINT d, UINT mj, UINT s, UINT ti)
{

     a += H(b, c, d) + mj + ti;

     a =  ROTATE_LEFT(a, s);

     a += b;
}
void II(UINT &a, UINT b, UINT c, UINT d, UINT mj, UINT s, UINT ti)
{

     a += I(b, c, d) + mj + ti;

     a =  ROTATE_LEFT(a, s);

     a += b;
}
// 处理一个512 bit 分组, 64字节.被分成16个子分组,每个分组32 bit;
void block_transform(UINT &a, UINT &b, UINT &c, UINT &d, UINT messageGroup[16])

{

     FF(a, b, c, d, messageGroup[ 0],  7, 0xd76aa478);
     FF(d, a, b, c, messageGroup[ 1], 12, 0xe8c7b756);
     FF(c, d, a, b, messageGroup[ 2], 17, 0x242070db);
     FF(b, c, d, a, messageGroup[ 3], 22, 0xc1bdceee);
     FF(a, b, c, d, messageGroup[ 4],  7, 0xf57c0faf);
     FF(d, a, b, c, messageGroup[ 5], 12, 0x4787c62a);
     FF(c, d, a, b, messageGroup[ 6], 17, 0xa8304613);
     FF(b, c, d, a, messageGroup[ 7], 22, 0xfd469501);
     FF(a, b, c, d, messageGroup[ 8],  7, 0x698098d8);
     FF(d, a, b, c, messageGroup[ 9], 12, 0x8b44f7af);
     FF(c, d, a, b, messageGroup[10], 17, 0xffff5bb1);
     FF(b, c, d, a, messageGroup[11], 22, 0x895cd7be);
     FF(a, b, c, d, messageGroup[12],  7, 0x6b901122);
     FF(d, a, b, c, messageGroup[13], 12, 0xfd987193);
     FF(c, d, a, b, messageGroup[14], 17, 0xa679438e);
     FF(b, c, d, a, messageGroup[15], 22, 0x49b40821);

     GG(a, b, c, d, messageGroup[ 1],  5, 0xf61e2562);
     GG(d, a, b, c, messageGroup[ 6],  9, 0xc040b340);
     GG(c, d, a, b, messageGroup[11], 14, 0x265e5a51);
     GG(b, c, d, a, messageGroup[ 0], 20, 0xe9b6c7aa);
     GG(a, b, c, d, messageGroup[ 5],  5, 0xd62f105d);
     GG(d, a, b, c, messageGroup[10],  9, 0x02441453);
     GG(c, d, a, b, messageGroup[15], 14, 0xd8a1e681);
     GG(b, c, d, a, messageGroup[ 4], 20, 0xe7d3fbc8);
     GG(a, b, c, d, messageGroup[ 9],  5, 0x21e1cde6);
     GG(d, a, b, c, messageGroup[14],  9, 0xc33707d6);
     GG(c, d, a, b, messageGroup[ 3], 14, 0xf4d50d87);
     GG(b, c, d, a, messageGroup[ 8], 20, 0x455a14ed);
     GG(a, b, c, d, messageGroup[13],  5, 0xa9e3e905);
     GG(d, a, b, c, messageGroup[ 2],  9, 0xfcefa3f8);
     GG(c, d, a, b, messageGroup[ 7], 14, 0x676f02d9);
     GG(b, c, d, a, messageGroup[12], 20, 0x8d2a4c8a);

     HH(a, b, c, d, messageGroup[ 5],  4, 0xfffa3942);
     HH(d, a, b, c, messageGroup[ 8], 11, 0x8771f681);
     HH(c, d, a, b, messageGroup[11], 16, 0x6d9d6122);
     HH(b, c, d, a, messageGroup[14], 23, 0xfde5380c);
     HH(a, b, c, d, messageGroup[ 1],  4, 0xa4beea44);
     HH(d, a, b, c, messageGroup[ 4], 11, 0x4bdecfa9);
     HH(c, d, a, b, messageGroup[ 7], 16, 0xf6bb4b60);
     HH(b, c, d, a, messageGroup[10], 23, 0xbebfbc70);
     HH(a, b, c, d, messageGroup[13],  4, 0x289b7ec6);
     HH(d, a, b, c, messageGroup[ 0], 11, 0xeaa127fa);
     HH(c, d, a, b, messageGroup[ 3], 16, 0xd4ef3085);
     HH(b, c, d, a, messageGroup[ 6], 23, 0x04881d05);
     HH(a, b, c, d, messageGroup[ 9],  4, 0xd9d4d039);
     HH(d, a, b, c, messageGroup[12], 11, 0xe6db99e5);
     HH(c, d, a, b, messageGroup[15], 16, 0x1fa27cf8);
     HH(b, c, d, a, messageGroup[ 2], 23, 0xc4ac5665);

     II(a, b, c, d, messageGroup[ 0],  6, 0xf4292244);
     II(d, a, b, c, messageGroup[ 7], 10, 0x432aff97);
     II(c, d, a, b, messageGroup[14], 15, 0xab9423a7);
     II(b, c, d, a, messageGroup[ 5], 21, 0xfc93a039);
     II(a, b, c, d, messageGroup[12],  6, 0x655b59c3);
     II(d, a, b, c, messageGroup[ 3], 10, 0x8f0ccc92);
     II(c, d, a, b, messageGroup[10], 15, 0xffeff47d);
     II(b, c, d, a, messageGroup[ 1], 21, 0x85845dd1);
     II(a, b, c, d, messageGroup[ 8],  6, 0x6fa87e4f);
     II(d, a, b, c, messageGroup[15], 10, 0xfe2ce6e0);
     II(c, d, a, b, messageGroup[ 6], 15, 0xa3014314);
     II(b, c, d, a, messageGroup[13], 21, 0x4e0811a1);
     II(a, b, c, d, messageGroup[ 4],  6, 0xf7537e82);
     II(d, a, b, c, messageGroup[11], 10, 0xbd3af235);
     II(c, d, a, b, messageGroup[ 2], 15, 0x2ad7d2bb);
     II(b, c, d, a, messageGroup[ 9], 21, 0xeb86d391);

}

 
char first_encoder[17];
// 散列
void md5_encoder(char *message, UINT len)
{
	if(len == 0)
	{
        len = (UINT)strlen(message);
	}

    UINT pointer = 0;
    UINT save[] = {0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476};
    UINT a, b, c, d;
    char currentGroup[64];
	UINT groupLen;
	UINT i = 0;
    while(pointer <= len)
    {
       groupLen = len - pointer;
	   if(groupLen > 64)
	   {
		   groupLen = 64;
       }
       for(i = 0; i < groupLen; i++)
       {
		   currentGroup[i] = message[pointer + i];
	   }
	   pointer += groupLen;
	   // 填充
	   if(groupLen < 64)
	   {
		   if(groupLen > 0 || len == 0)
		   {
			   currentGroup[i] = (char)0x80;
			   i++;
		   }
		   for(; i < 64; i++)
		   {
			   currentGroup[i] = 0;
		   }
		   if(groupLen < 56)
		   {
			   UINT blen = len * 8;
			   char * p = (char *) & blen;
			   for(i = 56; i < 60; i++)
			   {
				   currentGroup[i] = p[i - 56];
			   }
			   pointer = len + 1;
		   }
	   }
	   a = save[0], b = save[1], c = save[2], d = save[3];
	   block_transform(a, b, c, d, (UINT *)currentGroup);
	   save[0] += a, save[1] += b, save[2] += c, save[3] += d;
     }
 	memset(first_encoder, 0, 17);
// 	memcpy(first_encoder, save, 16);
}


void main()
{
	char digest[33];
//	md5_encoder("", 0);
	md5_encoder("jzfcf@hotmail.comias5www",24);
	for (int i = 0; i < 16; i = i+2);
	{
		sprintf(&digest[i], "%02x", first_encoder[i/2]);
	}


	
}
// 98 C9 77 DD CE 43 FB BB 32 55 48 8B DB 4E C1 35

 //key
//00
//EB B5 86 54 F1 97 E7 7D 77 F6 93 F9 85 62 A6 82 code

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -