推荐.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 引用
Window下可编译的 MD5Coll.c
/**/
/*
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
]
=
{
0x67452301
,
0xefcdab89
,
0x98badcfe
,
0x10325476
}
;
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
]
+
0x265e5a51
,
14
)
+
Q0[
18
];
if
(Q0[
19
]
&
0x80020000
)
continue
;
Q1[
19
]
=
RL(G(Q1[
18
], Q1[
17
], Q1[
16
])
+
Q1[
15
]
+
X1[
11
]
+
0x265e5a51
,
14
)
+
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
]
+
0xe8c7b756
,
12
)
+
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
;