I was waiting to release a tool because nate was working on an editor but oh well you beat me to it lol. You can simplify your source majorly though. Its literally just 4 little endian unsigned ints xored together. The shifting can be simplified into this.
Code:
unsigned int A = (md5[15] << 24) | (md5[14] << 16) | (md5[13] << 8) | md5[12];
unsigned int B = (md5[11] << 24) | (md5[10] << 16) | (md5[9] << 8) | md5[8];
unsigned int C = (md5[7] << 24) | (md5[6] << 16) | (md5[5] << 8) | md5[4];
unsigned int D = (md5[3] << 24) | (md5[2] << 16) | (md5[1] << 8) | md5[0];
unsigned int hash = A ^ B ^ C ^ D;