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

📄 md5cc.cpp

📁 属于加密解密领域的
💻 CPP
字号:
//--------------------------------------------------------------------
//
// MD5 Crack with Collisions
//
// by marstone@marstone.net, 2006.01.10
//
//--------------------------------------------------------------------

#ifndef MD
#define MD 5
#endif

#include <stdio.h>
#include <time.h>
#include <string.h>
#include <conio.h>

extern "C"
{
	#include "global.h"
	#if MD == 2
	#include "md2.h"
	#endif
	#if MD == 4
	#include "md4.h"
	#endif
	#if MD == 5
	#include "md5.h"
	#endif
}

/* Length of test block, number of test blocks.
 */
#define TEST_BLOCK_LEN 1000
#define TEST_BLOCK_COUNT 1000

static void MDString PROTO_LIST ((char *));
static void MDTimeTrial PROTO_LIST ((void));
static void MDTestSuite PROTO_LIST ((void));
static void MDFile PROTO_LIST ((char *));
static void MDFilter PROTO_LIST ((void));
static void MDPrint PROTO_LIST ((unsigned char [16]));

#if MD == 2
#define MD_CTX MD2_CTX
#define MDInit MD2Init
#define MDUpdate MD2Update
#define MDFinal MD2Final
#endif
#if MD == 4
#define MD_CTX MD4_CTX
#define MDInit MD4Init
#define MDUpdate MD4Update
#define MDFinal MD4Final
#endif
#if MD == 5
#define MD_CTX MD5_CTX
#define MDInit MD5Init
#define MDUpdate MD5Update
#define MDFinal MD5Final
#endif

unsigned int md5coll0[32] = {
0x3a41104a, 0x5281960d, 0x42e95e09, 0x0d89a60f,
0xb63d4ddc, 0x299e5df2, 0xb61a17cd, 0xeb460dab,
0x0533ecc5, 0xa27279fd, 0x9d6cb1bb, 0x13e11781,
0x0c3bd0cc, 0x8f4e9cd7, 0xcccab810, 0xa82669b5,
0xd80fddf2, 0xee049d23, 0xbb92ef73, 0xdd17104b,
0x1628ae7d, 0x1c78627e, 0x25a8b538, 0xe05e2850,
0x4cff9809, 0x26235db1, 0xc23fb1f6, 0x838a9055,
0x2dda9cd0, 0x26dba791, 0xa5188066, 0xf1e08a33,
};

unsigned int md5coll1[32] = {
0x3a41104a, 0x5281960d, 0x42e95e09, 0x0d89a60f,
0x363d4ddc, 0x299e5df2, 0xb61a17cd, 0xeb460dab,
0x0533ecc5, 0xa27279fd, 0x9d6cb1bb, 0x13e19781,
0x0c3bd0cc, 0x8f4e9cd7, 0x4ccab810, 0xa82669b5,
0xd80fddf2, 0xee049d23, 0xbb92ef73, 0xdd17104b,
0x9628ae7d, 0x1c78627e, 0x25a8b538, 0xe05e2850,
0x4cff9809, 0x26235db1, 0xc23fb1f6, 0x838a1055,
0x2dda9cd0, 0x26dba791, 0x25188066, 0xf1e08a33,
};



unsigned int m0[32] = {
0x02dd31d1, 0xc4eee6c5, 0x069a3d69, 0x5cf9af98,
0x87b5ca2f, 0xab7e4612, 0x3e580440, 0x897ffbb8,
0x0634ad55, 0x02b3f409, 0x8388e483, 0x5a417125,
0xe8255108, 0x9fc9cdf7, 0xf2bd1dd9, 0x5b3c3780,
0xd11d0b96, 0x9c7b41dc, 0xf497d8e4, 0xd555655a, 
0xc79a7335, 0x0cfdebf0, 0x66f12930, 0x8fb109d1,
0x797f2775, 0xeb5cd530, 0xbaade822, 0x5c15cc79,
0xddcb74ed, 0x6dd3c55f, 0xd80a9bb1, 0xe3a7cc35,
};

unsigned int m1[32] = {
0x02dd31d1, 0xc4eee6c5, 0x069a3d69, 0x5cf9af98,
0x87b5ca2f, 0xab7e4612, 0x3e580440, 0x897ffbb8,
0x0634ad55, 0x02b3f409, 0x8388e483, 0x5a417125,
0xe8255108, 0x9fc9cdf7, 0xf2bd1dd9, 0x5b3c3780,
0x313e82d8, 0x5b8f3456, 0xd4ac6dae, 0xc619c936,
0xb4e253dd, 0xfd03da87, 0x06633902, 0xa0cd48d2,
0x42339fe9, 0xe87e570f, 0x70b654ce, 0x1e0da880,
0xbc2198c6, 0x9383a8b6, 0x2b65f996, 0x702af76f,
};
unsigned int m2[32] = {
0x02dd31d1, 0xc4eee6c5, 0x069a3d69, 0x5cf9af98, 
0x07b5ca2f, 0xab7e4612, 0x3e580440, 0x897ffbb8,
0x0634ad55, 0x02b3f409, 0x8388e483, 0x5a41f125, 
0xe8255108, 0x9fc9cdf7, 0x72bd1dd9, 0x5b3c3780,
0x313e82d8, 0x5b8f3456, 0xd4ac6dae, 0xc619c936, 
0x34e253dd, 0xfd03da87, 0x06633902, 0xa0cd48d2,
0x42339fe9, 0xe87e570f, 0x70b654ce, 0x1e0d2880,
0xbc2198c6, 0x9383a8b6, 0xab65f996, 0x702af76f,
};

int main(int argc, char *argv[])
{
	printf("md5cc 0.1, by marstone@marstone.net\n");

	
	unsigned char result[16];
	MD_CTX context;

	// char string[16];
	// strcpy(string, "634634");
	// unsigned int len = strlen(string);
	
	//MDString("0000");

	////unsigned int m3[2] = {0x30303030, 0x30003030};
	//unsigned int m3[1] = {0x30303030};
	//MDInit(&context);
	//MDUpdate(&context, (unsigned char*)m3, 4);
	//MDFinal(result, &context);
	//printf("MD%d(m3) = ", MD, result);
	//MDPrint(result);
	
	unsigned int len = 128;
	unsigned int l = 128;
	


	MDInit(&context);
	MDUpdate(&context, (unsigned char*)md5coll0, l);
	MDFinal(result, &context);
	printf("MD%d(md5coll0) = ", MD, result);
	MDPrint(result);

	printf("\n");

	MDInit(&context);
	MDUpdate(&context, (unsigned char*)md5coll1, l);
	MDFinal(result, &context);
	printf("MD%d(md5coll1) = ", MD, result);
	MDPrint(result);

	printf("\n");
	printf("\n");

	MDInit(&context);
	MDUpdate(&context, (unsigned char*)m0, len);
	MDFinal(result, &context);
	printf("MD%d(m0) = ", MD, result);
	MDPrint(result);

	printf("\n");
	printf("\n");

	MDInit(&context);
	MDUpdate(&context, (unsigned char*)m1, len);
	MDFinal(result, &context);
	printf("MD%d(m1) = ", MD, result);
	MDPrint(result);

	printf("\n");

	MDInit(&context);
	MDUpdate(&context, (unsigned char*)m2, len);
	MDFinal(result, &context);
	printf("MD%d(m2) = ", MD, result);
	MDPrint(result);

	getch();
	return 0;
}

/* Digests a string and prints the result.
 */
static void MDString (char *string)
{
	MD_CTX context;
	unsigned char digest[16];
	unsigned int len = strlen(string);

	MDInit(&context);
	MDUpdate(&context, (unsigned char*)string, len);
	MDFinal(digest, &context);

	printf("MD%d (\"%s\") = ", MD, string);
	MDPrint(digest);
	printf("\n");
}

/* Measures the time to digest TEST_BLOCK_COUNT TEST_BLOCK_LEN-byte
  blocks.
 */
static void MDTimeTrial ()
{
	MD_CTX context;
	time_t endTime, startTime;
	unsigned char block[TEST_BLOCK_LEN], digest[16];
	unsigned int i;
	printf("MD%d time trial. Digesting %d %d-byte blocks ...", MD,
		TEST_BLOCK_LEN, TEST_BLOCK_COUNT);

	/* Initialize block */
	for (i = 0; i < TEST_BLOCK_LEN; i++)
		block[i] = (unsigned char)(i & 0xff);

	/* Start timer */
	time (&startTime);

	/* Digest blocks */
	MDInit (&context);
	for (i = 0; i < TEST_BLOCK_COUNT; i++)
		MDUpdate (&context, block, TEST_BLOCK_LEN);
	MDFinal (digest, &context);

	/* Stop timer */
	time (&endTime);

	printf(" done\n");
	printf("Digest = ");
	MDPrint (digest);
	printf("\nTime = %ld seconds\n", (long)(endTime-startTime));
	printf("Speed = %ld bytes/second\n",
	(long)TEST_BLOCK_LEN * (long)TEST_BLOCK_COUNT/(endTime-startTime));
}

/* Digests a reference suite of strings and prints the results.
 */
static void MDTestSuite ()
{
	printf("MD%d test suite:\n", MD);

	MDString("");
	MDString("a");
	MDString("abc");
	MDString("message digest");
	MDString("abcdefghijklmnopqrstuvwxyz");
	MDString("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
	MDString("12345678901234567890123456789012345678901234567890123456789012345678901234567890");
}

/* Digests a file and prints the result.*/
static void MDFile (char* filename)
{
	FILE *file;
	MD_CTX context;
	int len;
	unsigned char buffer[1024], digest[16];

	if ((file = fopen (filename, "rb")) == NULL)
		printf ("%s can't be opened\n", filename);
	else {
		MDInit (&context);
		while (len = fread (buffer, 1, 1024, file))
		MDUpdate (&context, buffer, len);
		MDFinal (digest, &context);

		fclose (file);

		printf ("MD%d (%s) = ", MD, filename);
		MDPrint (digest);
		printf ("\n");
	}
}

/* Digests the standard input and prints the result.
 */
static void MDFilter ()
{
	MD_CTX context;
	int len;
	unsigned char buffer[16], digest[16];

	MDInit (&context);
	while (len = fread (buffer, 1, 16, stdin))
		MDUpdate (&context, buffer, len);
	MDFinal (digest, &context);

	MDPrint (digest);
	printf ("\n");
}

/* Prints a message digest in hexadecimal.
 */
static void MDPrint (unsigned char digest[16])
{
	unsigned int i;

	for (i = 0; i < 16; i++)
		printf ("%02x", digest[i]);
}

⌨️ 快捷键说明

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