推荐.NET教程: ASP.NET C# 开发环境 Ajax教程 控件开发 统计报表 数据库 Web服务 安装部署 CommunityServer NHibernate DataGrid/GridView 实用代码 VS2005
示例源码 MVC/三层 SqlHelper 入门源码 开源 CMS Ajax/Atlas C#.net 毕业设计 源码 经典代码 商业 本站作品 持久层 随书源码 WebService 英文/汉化 Asp.net2.0

阿牛·乐园

每天进步一点点

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  80 随笔 :: 14 文章 :: 389 评论 :: 13 引用
/* MD5 Collision Generator by Patrick Stach <pstach@stachliu.com>
 * Implementation of paper by Xiaoyun Wang, et all.
 *
 * A few optimizations to make the solving method a bit more deterministic
 *
 * Usage:
 *      ./md5coll or ./md5coll IV0 IV1 IV2 IV3
 *
 * Requires being built as 32 bit (unsigned int as 32 bit)
 *
 * Any derivative works or references must cite the authors.
 *
 * modify it ,make it can run in window by evlon 2006-7-10
 
*/

#include 
"stdafx.h"

#include 
<stdio.h>
#include 
<stdlib.h>
//#include <unistd.h>
#include <time.h>
#include 
<math.h>
#include 
<process.h>

#define F(x, y, z) (z ^ (x & (y ^ z)))
#define G(x, y, z) F(z, x, y)
#define H(x, y, z) (x ^ y ^ z)
#define I(x, y, z) (y ^ (x | ~z))

#define RL(x, y) (((x) << (y)) | ((x) >> (32 - (y))))
#define RR(x, y) (((x) >> (y)) | ((x) << (32 - (y))))

unsigned 
int A0, B0, C0, D0;
unsigned 
int A1, B1, C1, D1;

unsigned 
int IV[4= 0x674523010xefcdab890x98badcfe0x10325476 };
unsigned 
int Q0[65], Q1[65];
unsigned 
int X0[32], X1[32];

void block1(void)
{
    size_t i;
//, max;

block1_again:
    
for(;;)
    
{
        
/* C1 */
        Q0[ 
3= rand() & ~0x00800040;
        Q1[ 
3= Q0[ 3];

        
/* B1 */
        Q0[ 
4= (rand() | 0x80080800& ~(0x00800040 | 0x0077f780);
        Q0[ 
4|= (Q0[ 3& 0x0077f780);
        Q1[ 
4= Q0[ 4];

        
/* A2 */
        Q0[ 
5= (rand() | 0x88400025& ~0x02bfffc0;
        Q1[ 
5= Q0[ 5- 0x00000040;

        
/* D2 */
        Q0[ 
6= (rand() | 0x027fbc41& ~(0x888043a4 | 0x7500001a);
        Q0[ 
6|= (Q0[ 5& 0x7500001a);
        Q1[ 
6= Q0[ 6- 0x7f800040;

        
/* C2 */
        Q0[ 
7= (rand() | 0x03fef820& ~0xfc0107df;
        Q1[ 
7= Q0[ 7- 0x07800041;

        X0[ 
6= RR(Q0[ 7- Q0[ 6], 17- F(Q0[ 6], Q0[ 5], Q0[ 4])
            
- Q0[ 3- 0xa8304613;
        X1[ 
6= RR(Q1[ 7- Q1[ 6], 17- F(Q1[ 6], Q1[ 5], Q1[ 4])
            
- Q1[ 3- 0xa8304613;
        
if(X0[ 6!= X1[ 6])
            
continue;

        
/* B2 */
        Q0[ 
8= (rand() | 0x01910540& ~0xfe0eaabf;
        Q1[ 
8= Q0[ 8- 0x00827fff;
        
        X0[ 
7= RR(Q0[ 8- Q0[ 7], 22- F(Q0[ 7], Q0[ 6], Q0[ 5])
            
- Q0[ 4- 0xfd469501;
        X1[ 
7= RR(Q1[ 8- Q1[ 7], 22- F(Q1[ 7], Q1[ 6], Q1[ 5])
            
- Q1[ 4- 0xfd469501;
        
if(X0[ 7!= X1[ 7])
            
continue;

        
/* A3 */
        Q0[ 
9= (rand() | 0xfb102f3d& ~(0x040f80c2 | 0x00001000);
        Q0[ 
9|= (Q0[ 8& 0x00001000);
        Q1[ 
9= Q0[ 9- 0x8000003f;

        X0[ 
8= RR(Q0[ 9- Q0[ 8],  7- F(Q0[ 8], Q0[ 7], Q0[ 6])
            
- Q0[ 5- 0x698098d8;
        X1[ 
8= RR(Q1[ 9- Q1[ 8],  7- F(Q1[ 8], Q1[ 7], Q1[ 6])
            
- Q1[ 5- 0x698098d8;
        
if(X0[ 8!= X1[ 8])
            
continue;

        
/* D3 */
        Q0[
10= (rand() | 0x401f9040& ~0x80802183;
        Q1[
10= Q0[10- 0x7ffff000;

        X0[ 
9= RR(Q0[10- Q0[ 9], 12- F(Q0[ 9], Q0[ 8], Q0[ 7])
            
- Q0[ 6- 0x8b44f7af;
        X1[ 
9= RR(Q1[10- Q1[ 9], 12- F(Q1[ 9], Q1[ 8], Q1[ 7])
            
- Q1[ 6- 0x8b44f7af;
        
if(X0[ 9!= X1[ 9])
            
continue;

        
/* C3 */
        Q0[
11= (rand() | 0x000180c2& ~(0xc00e3101 | 0x00004000);
        Q0[
11|= (Q0[10& 0x00004000);
        Q1[
11= Q0[11- 0x40000000;

        X0[
10= RR(Q0[11- Q0[10], 17- F(Q0[10], Q0[ 9], Q0[ 8])
            
- Q0[ 7- 0xffff5bb1;
        X1[
10= RR(Q1[11- Q1[10], 17- F(Q1[10], Q1[ 9], Q1[ 8])
            
- Q1[ 7- 0xffff5bb1;
        
if(X0[10!= X1[10])
            
continue;

        
/* B3 */
        Q0[
12= (rand() | 0x00081100& ~(0xc007e080 | 0x03000000);
        Q0[
12|= (Q0[11& 0x03000000);
        Q1[
12= Q0[12- 0x80002080;
        
        X0[
11= RR(Q0[12- Q0[11], 22- F(Q0[11], Q0[10], Q0[ 9])
            
- Q0[ 8- 0x895cd7be;
        X1[
11= RR(Q1[12- Q1[11], 22- F(Q1[11], Q1[10], Q1[ 9])
            
- Q1[ 8- 0x895cd7be;
        
if((X0[11^ X1[11]) != 0x00008000)
            
continue;

        
/* A4 */
        Q0[
13= (rand() | 0x410fe008& ~0x82000180;
        Q1[
13= Q0[13- 0x7f000000;

        X0[
12= RR(Q0[13- Q0[12],  7- F(Q0[12], Q0[11], Q0[10])
            
- Q0[ 9- 0x6b901122;
        X1[
12= RR(Q1[13- Q1[12],  7- F(Q1[12], Q1[11], Q1[10])
            
- Q1[ 9- 0x6b901122;
        
if(X0[12!= X1[12])
            
continue;

        
/* D4 */
        Q0[
14= (rand() | 0x000be188& ~0xa3040000;
        Q1[
14= Q0[14- 0x80000000;

        X0[
13= RR(Q0[14- Q0[13], 12- F(Q0[13], Q0[12], Q0[11])
            
- Q0[10- 0xfd987193;
        X1[
13= RR(Q1[14- Q1[13], 12- F(Q1[13], Q1[12], Q1[11])
            
- Q1[10- 0xfd987193;
        
if(X0[13!= X1[13])
            
continue;

        
/* C4 */
        Q0[
15= (rand() | 0x21008000& ~0x82000008;
        Q1[
15= Q0[15- 0x80007ff8;

        X0[
14= RR(Q0[15- Q0[14], 17- F(Q0[14], Q0[13], Q0[12])
            
- Q0[11- 0xa679438e;
        X1[
14= RR(Q1[15- Q1[14], 17- F(Q1[14], Q1[13], Q1[12])
            
- Q1[11- 0xa679438e;
        
if((X0[14^ X1[14]) != 0x80000000)
            
continue;


        
/* B4 */
        Q0[
16= (rand() | 0x20000000& ~0x80000000;
        Q1[
16= Q0[16- 0xa0000000;

        X0[
15= RR(Q0[16- Q0[15], 22- F(Q0[15], Q0[14], Q0[13])
            
- Q0[12- 0x49b40821;
        X1[
15= RR(Q1[16- Q1[15], 22- F(Q1[15], Q1[14], Q1[13])
            
- Q1[12- 0x49b40821;
        
if(X0[15!= X1[15])
            
continue;
        
break;
    }


#define LOOP_11 300
    
for(i = 0; i < LOOP_11; i++)
    
{
        
/* A5 */
        Q0[
17= rand() & ~(0x80020000 | 0x00008008);
        Q0[
17|= (Q0[16& 0x00008008);
        Q1[
17= Q0[17- 0x80000000;

        X0[ 
1= RR(Q0[17- Q0[16],  5- G(Q0[16], Q0[15], Q0[14])
            
- Q0[13- 0xf61e2562;
        X1[ 
1= RR(Q1[17- Q1[16],  5- G(Q1[16], Q1[15], Q1[14])
            
- Q1[13- 0xf61e2562;
        
if(X0[ 1!= X1[ 1])
            
continue;

        
/* D5 */
        Q0[
18= RL(G(Q0[17], Q0[16], Q0[15]) + Q0[14]
            
+ X0[ 6+ 0xc040b340,  9+ Q0[17];
        
if((Q0[18& 0xa0020000)
            
!= (0x00020000 | (Q0[17& 0x20000000)))
        
{
            
continue;
        }

        Q1[
18= RL(G(Q1[17], Q1[16], Q1[15]) + Q1[14]
            
+ X1[ 6+ 0xc040b340,  9+ Q1[17];
        
if((Q0[18^ Q1[18]) != 0x80000000)
            
continue;

        
/* C5 */
        Q0[
19= RL(G(Q0[18], Q0[17], Q0[16]) + Q0[15]
            
+ X0[11+ 0x265e5a5114+ Q0[18];
        
if(Q0[19& 0x80020000)
            
continue;
        Q1[
19= RL(G(Q1[18], Q1[17], Q1[16]) + Q1[15]
            
+ X1[11+ 0x265e5a5114+ Q1[18];
        
if(Q0[19- Q1[19!= 0x7ffe0000)
            
continue;

        
/* B5 */
        Q0[
20= rand() & ~0x80000000;
        Q1[
20= Q0[20- 0x80000000;

        X0[ 
0= RR(Q0[20- Q0[19], 20- G(Q0[19], Q0[18], Q0[17])
            
- Q0[16- 0xe9b6c7aa;
        X1[ 
0= RR(Q1[20- Q1[19], 20- G(Q1[19], Q1[18], Q1[17])
            
- Q1[16- 0xe9b6c7aa;
        
if(X0[ 0!= X1[ 0])
            
continue;

        Q0[ 
1= RL(F(IV[1], IV[2], IV[3]) + IV[0]
            
+ X0[ 0+ 0xd76aa478,  7+ IV[1];
        Q1[ 
1= Q0[ 1];

        Q0[ 
2= RL(F(Q0[ 1], IV[1], IV[2]) + IV[3]
            
+ X0[ 1+ 0xe8c7b75612+ Q0[ 1];
        Q1[ 
2= Q0[ 2];

        X0[ 
2= RR(Q0[ 3- Q0[ 2], 17- F(Q0[ 2], Q0[ 1], IV[1])
            
- IV[2- 0x242070db;
        X1[ 
2= X0[ 2];

        X0[ 
3= RR(Q0[ 4- Q0[ 3], 22- F(Q0[ 3], Q0[ 2], Q0[ 1])
            
- IV[1- 0xc1bdceee;
        X1[ 
3= X0[ 3];

        X0[ 
4= RR(Q0[ 5- Q0[ 4],  7- F(Q0[ 4], Q0[ 3], Q0[ 2])
            
- Q0[ 1- 0xf57c0faf;