Bueno este post se lo dedico a todas aquellas personas que escriben en los foros que son capaces de desencriptar algoritmos como
MD5 y
SHA1 o todas esas tonterías que colocan. MMmm de echo yo también tengo el código para desencriptar MD5 pero no lo traigo ya que lo codifique en mi reloj calculadora casio que también cambia el canal de mi tele pero se lo robaron (
Que casualidad que las personas que saben encriptar siempre colocan un ejemplo pero los que presumen que desencriptan siempre surge un problema por el cual no pueden colocar el ejemplo pero te dicen que luego te lo envían). Aquí les explicare los dos principales algoritmos que son fáciles de usar y sencillos de entender.
En este primer parte tocaremos el algoritmo MD5 (
Message-Digest Algorithm 5) creado por Ronal Rivest del
MIT (
Massachusetts Institute of Technology) que fue creado en 1991 reemplazando al
MD4 que en investigaciones previas se descubrieron su debilidad (
No es que alguien normal lo pueda romper, este descubirmiento lo realizo un equipo de genios que dirigía Hans Dobbertin utilizando equipos similares a la IBM P690 que dudo muchas personas en el mundo tengan acceso a un equipo como este así que no me preocupo que mi vecino de 15 años que se la vive en la compu y dice que es super hacker pueda romper jejeje) y como era de esperarse con el avance de la tecnología ya se ha descubierto que el MD5 también es un algoritmo que puede llegar a descifrarse incluso con pruebas de colisión de hash (
En palabras de humanos es cuando dos textos pueden generar el mismo resultado y se efectivamente para los que ya se imaginaron cualquier función matemática generara alguna vez una colisión pero se dice que un algoritmo es más seguro cuando su vertiente a colisiones en menor ya que si quisieran evitar una colisión la salida cifrada tendría que ser siempre mayor a la información de entrada garantizando una digestión perfecta pero poco dimensionable) y obiamente como cualquier otro algoritmo puede ser quebrantado por la famosísima fuerza bruta pero es poco eficiente, aquí les dejo los 5 pasos a groso modo del MD5.
Paso 1. Añadiendo bitsEl mensaje será extendido hasta que su longitud en bits sea congruente con 448, módulo 512. Esto es, si se le resta 448 a la longitud del mensaje tras este paso, se obtiene un múltiplo de 512. Esta extensión se realiza siempre, incluso si la longitud del mensaje es ya congruente con 448, módulo 512.
La extensión se realiza como sigue: un sólo bit "1" se añade al mensaje, y después bits "0" se añaden hasta que la longitud en bits del mensaje extendido se haga congruente con 448, módulo 512. En todos los mensajes se añade al menos un bit y como máximo 512.
Paso 2. Longitud del mensajeUn entero de 64 bits que represente la longitud 'b' del mensaje (
longitud antes de añadir los bits) se concatena al resultado del paso anterior. En el supuesto no deseado de que 'b' sea mayor que 2^64, entonces sólo los 64 bits de menor peso de 'b' se usarán.
En este punto el mensaje resultante (
después de rellenar con los bits y con 'b') se tiene una longitud que es un múltiplo exacto de 512 bits. A su vez, la longitud del mensaje es múltiplo de 16 palabras (
32 bits por palabra). Con M[0 ... N-1] denotaremos las palabras del mensaje resultante, donde N es múltiplo de 16.
Paso 3. Inicializar el búfer MDUn búfer de cuatro palabras (A, B, C, D) se usa para calcular el resumen del mensaje. Aquí cada una de las letras A, B, C, D representa un registro de 32 bits. Estos registros se inicializan con los siguientes valores hexadecimales, los bits de menor peso primero:
palabra A: 01 23 45 67
palabra B: 89 ab cd ef
palabra C: fe dc ba 98
palabra D: 76 54 32 10
Paso 4. Procesado del mensaje en bloques de 16 palabrasPrimero definimos cuatro funciones auxiliares que toman como entrada tres palabras de 32 bits y su salida es una palabra de 32 bits.

Los

operadores son las funciones XOR, AND, OR y NOT respectivamente.
En cada posición de cada bit F actúa como un condicional: si X, entonces Y sino Z. La función F podría haber sido definida usando + en lugar de v ya que XY y not(x) Z nunca tendrán unos ('1') en la misma posición de bit. Es interesante resaltar que si los bits de X, Y y Z son independientes y no sesgados, cada uno de los bits de F(X,Y,Z) será independiente y no sesgado.
Las funciones G, H e I son similares a la función F, ya que actúan "bit a bit en paralelo" para producir sus salidas de los bits de X, Y y Z, en la medida que si cada bit correspondiente de X, Y y Z son independientes y no sesgados, entonces cada bit de G(X,Y,Z), H(X,Y,Z) e I(X,Y,Z) serán independientes y no sesgados. Nótese que la función H es la comparación bit a bit "xor" o función "paridad" de sus entradas.
Este paso usa una tabla de 64 elementos T[1 ... 64] construida con la función Seno. Denotaremos por T[i] el elemento i-ésimo de esta tabla, que será igual a la parte entera del valor absoluto del seno de 'i' 4294967296 veces, donde 'i' está en radianes.