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;