Se vuoi scriverti ex novo una funzione che faccia l'hash questa non potrà che essere un tantino complessa. Ti consiglio questo link, in inglese, con spiegazione dettagliatissima della logica dell'MD5 ed esempi in C: http://www.faqs.org/rfcs/rfc1321.html