2012-03-14 18 views
10

Necesito entender el algoritmo de hash Md5. Estaba leyendo un documentos y estadosRelleno en MD5 Hash Algorithm

"El mensaje es 'relleno' (extendido), de modo que su longitud (en bits) es congruente con 448, módulo 512. Es decir, el mensaje se extiende de manera que está a solo 64 bits de ser un múltiplo de 512 bits de longitud. El relleno siempre se realiza, incluso si la longitud del mensaje es ya es congruente con 448, módulo 512. "

Necesito entender lo que esto significa en términos simples, especialmente el 448 módulo 512. La palabra MODULO es el problema. Por favor agradeceré ejemplos simples a esto. Aunque es divertido, este es el primer paso para el hash MD5. :)

Gracias

Respuesta

10

Modulo o mod, es una función que se traduce en que le dice el resto cuando dos números se dividen por la otra.

Por ejemplo:

5 modulo 3:

5/3 = 1, con 2 resto. Entonces 5 mod 3 es 2.

10 módulo 16 = 10, porque no se puede hacer 16.

15 módulo 5 = 0, porque 15 pasa a 5 exactamente 3 veces. 15 es un múltiplo de 5.

De vuelta en la escuela, habrías aprendido esto como "Remainder" o "Left Over", modulo es solo una manera elegante de decir eso.

Lo que está diciendo aquí, es que cuando usas MD5, una de las primeras cosas que sucede es que complementas tu mensaje para que sea suficiente. En el caso de MD5, su mensaje debe ser n bits, donde n = (512 * z) +448 yz es cualquier número.

Como ejemplo, si tuviera un archivo que tenía 1472 bits de longitud, entonces podría usarlo como un hash MD5, porque 1472 módulo 512 = 448. Si el archivo tenía 1400 bits de longitud, entonces lo haría necesita rellenar 72 bits adicionales antes de poder ejecutar el resto del algoritmo MD5.

0

El módulo es el resto de la división. En el ejemplo

512 mod 448 = 64 
448 mod 512 = 448 

Otro enfoque de 512 mod 448 sería dividirlos 512/448 = 1,142 ..

Luego se resta 512 del número del resultado antes de puntos multiplicado por 448:

512 - 448*1 == 64 That's your modulus result. 

Lo que necesita saber es que el 448 es 64 bits más corto que el 512.

¿Pero qué pasa si está entre 448 y 512?

Normalmente necesitamos restar 448 por x (resultado del módulo).

447 mod 512 = 447; 448 - 447 = 1; (all good, 1 zero to pad) 

449 mod 512 = 1; 448 - 449 = -1 ??? 

Así que esta solución de problema sería tomar un múltiplo más alto de 512, pero aún más corto de 64;

512*2 - 64 = 960 
449 mod 512 = 1; 960 - 449 = 511; 

Esto sucede porque después tenemos que añadir 64 bits del mensaje original y el de larga duración tienen que ser múltiplo de 512.

960 - 449 = 511; 
511 + 449 + 64 = 1024; 
1024 is multiple of 512;