11 hash (const char *start
, char *out
)
13 unsigned char sum
[16];
15 md5_buffer(start
, strlen (start
), sum
);
16 for (j
= 0; j
< 16; j
++) {
17 out
[j
* 2] = "0123456789abcdef"[sum
[j
] >> 4];
18 out
[j
* 2 + 1] = "0123456789abcdef"[sum
[j
] & 0xf];
20 for (i
= 0; i
< 2016; i
++) {
21 md5_buffer(out
, 32, sum
);
22 for (j
= 0; j
< 16; j
++) {
23 out
[j
* 2] = "0123456789abcdef"[sum
[j
] >> 4];
24 out
[j
* 2 + 1] = "0123456789abcdef"[sum
[j
] & 0xf];
30 main (int argc
, char **argv
)
32 char *salt
= "zpqevtbw";
35 char str
[] = "xxxxxxxx99999999";
36 char *p
= stpcpy (str
, salt
);
38 for (i
= 0; i
< 1000; i
++) {
45 char candidate
[5] = "";
46 for (j
= 0; j
< 32 - 2; j
++)
47 if (buf
[i
% 1000][j
] == buf
[i
% 1000][j
+ 1] &&
48 buf
[i
% 1000][j
] == buf
[i
% 1000][j
+ 2]) {
49 printf ("found a triple at index %d\n", i
);
50 memset (candidate
, buf
[i
% 1000][j
], 5);
53 sprintf (p
, "%d", i
+ 1000);
54 hash (str
, buf
[i
% 1000]);
56 if (*candidate
&& memmem (buf
, 33 * 1000, candidate
, 5)) {
57 printf ("candidate was a key\n");
61 printf ("final index: %d\n", i
- 1);