MD5 es algoritmo de resumen o HASH, recordemos que los algoritmos de HASH no poducen contraseñas o mensajes codificados, sino resumenes de mensajes o archivos.
Los resumenes generados, sirven para generar un identificador unico para poder validar o autentificar un mensaje o un archivo descargado, MD5 es el algoritmo de HASH mas extendido en el mundo, pero veamos como funciona
Debido a que no crea claves, es facil encontrar informacion sobre su funcionamiento, la version mas usual de MD5 es la de 128 bits, la cual genera una cadena en hexadecimal.
Este algoritmo funciona a traves de 4 pasos
primer paso: expansion del mensaje.
en este paso se añaden bits al mensaje para que al momento de restarle 448 a la cadena de bits, nos de como resultado un multiplo de 512, con esto normalizamos el tamaño del mensaje
segundo paso: medicion del mensaje
la longitud del mensaje se añade al mensaje en forma de un numero entero de 64 bists, esto complementa el paso anterior para que mensaje tenga una longitud exacta en multiplos de 512
tercer paso: inicializacion del buffer
se crean 4 cadenas de 32 bits, las cuales serviran de buffero valores iniciales
cuarto paso: procesado
se toman 3 bloques de 16 bits del mensaje, a estos tres bloques se les hace pasar por 4 funciones logicas que daran como resultado un solo bloque de 16, es decir, por cada tres bloques obtenemos un bloque, esto es por cada funcion, los mismo tres bloques se aplican en cada funcion y el valor resultante se suma al buffer que le corresponde
el valor obtenido de la primera funcion logica se suma al valor del primer buffer, el valor obtenido de la segunda funcion logica se suma al valor del segundo buffer y asi sucesivamente.
la cadena identificador se creara a partir de la concatenacion de los 4 buffers resultantes.
Ahora bien, si no nos queremos complicar codificando todo esto, existen las librerias MD5 y las instrucciones correspondientes para muchos lenguajes de programacion y de scripts en internes, por citar algunos que tiene soporte para MD5 tenemos C++, javascript y php.