Hola Wellnic,
solo un par de comentarios. Lo primero que,
según tengo entendido, la fortaleza de un algoritmo de cifrado, como md5, se debe al propio algoritmo y no al numero de veces que este se repite. ¿No seria entonces mas fácil e igual de seguro usar un solo md5?, a esa cuestión nos tendría que responder un matemático, yo no me veo cualificado. Aunque se me ocurre que el motivo sea obtener claves de mas de 16 bytes de longitud y no aumentar la seguridad, si es así, ignora mi ultimo comentario
Por otro lado veo que primero calculas el md5 a partir de un string (MD5String), y lo conviertes es un string (MD5DigestToStr), para luego hacer el paso inverso (c:= c+Chr(StrToInt('$'+Copy(sumhs, (2*ch)-1, 2)));) ¿No nos podríamos ahorrar este paso?
La idea es interesante. Si necesitas de una función para calcular el hash md5 que puedas adaptar a tus necesidades puedes usar esta (Hashes.zip):
http://www.clubdelphi.com/foros/show...22&postcount=4
Es sencilla así que puedes modificarla fácilmente.