Esa es en realidad una buena pregunta.
MD5 es una función hash - es "mezcla" datos de entrada de tal manera que debe ser inviable para hacer un número de cosas, incluyendo la recuperación de la entrada dada la salida (no es cifrado, hay sin llave y no debe invertirse, sino todo lo contrario). Una descripción manual es que cada bit de entrada se inyecta varias veces en un estado interno lo suficientemente grande, que se mezcla de tal forma que cualquier diferencia se propaga rápidamente a todo el estado.
MD5 es public since 1992. No hay ningún secreto, y nunca ha sido ningún secreto, para el diseño de MD5.
MD5 se considera criptográficamente roto desde 2004, año de publicación de la primera colisión (dos mensajes de entrada distintos que producen el mismo resultado); se consideró "débil" desde 1996 (cuando se encontraron algunas propiedades estructurales, que se cree que finalmente ayudan a construir colisiones). Sin embargo, existen otras funciones hash, que son tan públicas como MD5 y para las que todavía no se conoce ninguna debilidad: la familia SHA-2. Las nuevas funciones hash se están evaluando actualmente como parte de la competencia SHA-3.
La parte realmente preocupante es que no existe una prueba matemática conocida de que realmente exista una función hash. Una función hash es un algoritmo eficiente descrito públicamente, que puede integrarse como un circuito lógico de tamaño finito, fijo y pequeño. Para los profesionales de la complejidad computacional, es algo sorprendente que sea posible exhibir un circuito que no se puede invertir. Así que ahora solo tenemos candidatos: funciones para las cuales nadie ha encontrado debilidades aún, en lugar de funciones para las cuales no existe debilidad. Por otro lado, el caso de MD5 muestra que, al parecer, pasar de las deficiencias estructurales conocidas a las colisiones reales a los ataques lleva una cantidad sustancial de tiempo (debilidades en 1996, colisiones en 2004, colisiones aplicadas - a un par de X.509 certificados - en 2008), por lo que la tendencia actual es usar agilidad del algoritmo: cuando usamos una función hash en un protocolo, también pensamos en cómo podríamos hacer la transición a otra si la función hash resulta ser débil.
Respuesta más breve: Por la misma razón, saber cómo agregarlo no te permite saber qué dos números agregué para obtener 42. –
um ... vale ... No pude entender cómo conseguiste 42 mirando en tu código fuente? – shady
Mi código fuente es "result = x + y". ¿Qué números usé? –