0d1dab0576dfe336bff59527a9f829913cd1d975
15 //void mangle(char * password)
16 u32x
mangle_md5 (u32x w0
[4], u32x w1
[4], const u32x in_len
)
18 u32x out_len
= in_len
;
27 append_0x80_2x4_VV (w0
, w1
, out_len
);
43 w3_t
[2] = (out_len
) * 8;
51 md5_transform_cl (w0_t
, w1_t
, w2_t
, w3_t
, digest
);
56 ((u8 *)digest)[0] = 0x87;
57 ((u8 *)digest)[1] = 0x43;
58 ((u8 *)digest)[2] = 0xb5;
59 ((u8 *)digest)[3] = 0x20;
60 ((u8 *)digest)[4] = 0x63;
61 ((u8 *)digest)[5] = 0xcd;
63 out_len
= b64_encode (b64encoded
, 6, (u8
*)digest
);
65 for (i
= out_len
; i
< 16; i
++) {
81 w0
[0] = ((u32x
*)b64encoded
)[0];
82 w0
[1] = ((u32x
*)b64encoded
)[1];
83 w0
[2] = ((u32x
*)b64encoded
)[2];
84 w0
[3] = ((u32x
*)b64encoded
)[3];
93 u32x
mangle_hmac (u32x w0
[4], u32x w1
[4], const u32x in_len
)
95 u32x out_len
= in_len
;
110 md5hmac_domain((u8
*)data
, in_len
, (u8
*)digest
);
113 // for (i = 0; i < 16; i++) {
114 // printf("%x", ((u8 *)digest)[i]);
127 out_len
= b64_encode ((u8
*)data
, 16, (u8
*)w0
);
130 for (i
= out_len
; i
< 32; i
++) {
146 void writeHexByte(unsigned char byte
, unsigned char * hex
) {
147 static char number
[] = "0123456789abcdef";
149 hex
[0] = number
[(byte
>> 4)];
150 hex
[1] = number
[(byte
% 16)];
153 int main(int argc
, char * argv
[]) {
154 unsigned char result
[RESULT_MAX
];
155 unsigned char salt
[SALT_MAX
];
156 unsigned char digest
[DIGEST_SIZE
];
157 unsigned char hash
[DIGEST_SIZE
* 2 + 1];
160 char password
[PASS_MAX
];
162 for (pos
= 0; pos
< PASS_MAX
; pos
++) {
167 strncpy(password
, argv
[1], PASS_MAX
);
170 strncpy(password
, "hashcat", PASS_MAX
);
172 password
[PASS_MAX
- 1] = '\0';
175 strncpy(salt
, argv
[2], SALT_MAX
);
178 strncpy(salt
, "1234", SALT_MAX
);
180 salt
[SALT_MAX
- 1] = '\0';
182 //SPH_HashedPassowrd("hashcat", "flypig.co.uk", result);
186 size
= mangle_hmac ((u32x
*)password
, (u32x
*)(password
+ 16), strlen(password
));
188 //md5hmac(salt, password, digest);
190 md5hmac_cl(salt
, strlen(salt
), password
, size
, digest
);
193 for (pos
= 0; pos
< DIGEST_SIZE
; pos
++) {
194 writeHexByte(digest
[pos
], hash
+ (pos
* 2));
196 hash
[DIGEST_SIZE
* 2] = '\0';
198 printf("(password, salt) = (\"%s\", \"%s\")\n", password
, salt
);
199 printf("Result: %s:%s\n", hash
, salt
);