#!/usr/bin/env python # MD5 collision, fields s1 and s2 taken from: # http://www.rtfm.com/movabletype/archives/2004_08.html # R.Wobst, @(#) Oct 15 2004, 17:37:56 import binascii, md5 s1 = ''' d1 31 dd 02 c5 e6 ee c4 69 3d 9a 06 98 af f9 5c 2f ca b5 87 12 46 7e ab 40 04 58 3e b8 fb 7f 89 55 ad 34 06 09 f4 b3 02 83 e4 88 83 25 71 41 5a 08 51 25 e8 f7 cd c9 9f d9 1d bd f2 80 37 3c 5b d8 82 3e 31 56 34 8f 5b ae 6d ac d4 36 c9 19 c6 dd 53 e2 b4 87 da 03 fd 02 39 63 06 d2 48 cd a0 e9 9f 33 42 0f 57 7e e8 ce 54 b6 70 80 a8 0d 1e c6 98 21 bc b6 a8 83 93 96 f9 65 2b 6f f7 2a 70 ''' s2 = ''' d1 31 dd 02 c5 e6 ee c4 69 3d 9a 06 98 af f9 5c 2f ca b5 07 12 46 7e ab 40 04 58 3e b8 fb 7f 89 55 ad 34 06 09 f4 b3 02 83 e4 88 83 25 f1 41 5a 08 51 25 e8 f7 cd c9 9f d9 1d bd 72 80 37 3c 5b d8 82 3e 31 56 34 8f 5b ae 6d ac d4 36 c9 19 c6 dd 53 e2 34 87 da 03 fd 02 39 63 06 d2 48 cd a0 e9 9f 33 42 0f 57 7e e8 ce 54 b6 70 80 28 0d 1e c6 98 21 bc b6 a8 83 93 96 f9 65 ab 6f f7 2a 70 ''' msg='Irgendein beliebiger Text angehaengt.' s1 = s1.split() s2 = s2.split() cnt = 0 for i in range(len(s1)): if s1[i] != s2[i]: cnt += 1 print 'difference %d: s1[%3d] XOR s2[%3d] = %02x' % \ (cnt, i, i, int(s1[i],16) ^ int(s2[i],16)) s1 = ''.join(s1) s2 = ''.join(s2) m1 = binascii.a2b_hex(s1) m2 = binascii.a2b_hex(s2) print for i in [1,2]: h = md5.new(); exec 'h.update(m%d)' % i; h.update(msg) print 'MD5(s%d+msg): %s' % (i, h.hexdigest())