¿La longitud de 64 bits de la cadena original también se rellena en la función hash MD5?

5

Entonces, por ejemplo, tengo una cadena cuyo valor binario tiene exactamente una longitud de 512 a 64 bits, por lo que no es necesario rellenar la conversión binaria de la cadena. Entonces eso significa que tengo una cadena de 56 caracteres.

El equivalente binario de 56 es 00111000 , que es 64 - 8 corto de 64 bits. ¿Cómo se llenan los bits restantes? ¿También están acolchados?

Esto es lo que sucede cuando se rellena la cadena:

  

El mensaje está "rellenado" (extendido) para que su longitud (en bits) sea      congruente con 448, módulo 512. Es decir, el mensaje se extiende para      eso es solo 64 bits menos de ser un múltiplo de 512 bits de largo.      El relleno se realiza siempre, incluso si la longitud del mensaje es      Ya congruente con 448, modulo 512.

     

El relleno se realiza de la siguiente manera: se agrega un solo "1" bit a la      mensaje, y luego se agregan "0" bits para que la longitud en bits de      el mensaje rellenado se convierte en congruente con 448, módulo 512. En total, en      como mínimo se agrega un bit y, como máximo, 512 bits.

desde aquí .

Sin embargo, en el mismo documento, no se proporciona ninguna aclaración sobre los bits 'vacíos' restantes (512 - 56 * 8 - 8):

  

Una representación de 64 bits de b (la longitud del mensaje antes de la      Se agregaron bits de relleno) al resultado de la anterior.      paso. En el improbable caso de que b sea mayor que 2 ^ 64, entonces solo      Se utilizan los 64 bits de orden inferior de b. (Estos bits se añaden como dos      Palabras de 32 bits y palabras de orden inferior agregadas primero de acuerdo con el      convenciones anteriores.)

     

En este punto, el mensaje resultante (después de rellenar con bits y con      b) tiene una longitud que es un múltiplo exacto de 512 bits. Equivalentemente,      este mensaje tiene una longitud que es un múltiplo exacto de 16 (32 bits)      palabras. Sea M [0 ... N-1] las palabras del mensaje resultante,      donde N es un múltiplo de 16.

Espero que mi pregunta sea entendida?

Mi opinión es que los 64 bits ( 00111000 ) 0's se rellenan frente a la representación de 64 bits de la longitud.

    
pregunta Thomas W 03.10.2015 - 10:15
fuente

1 respuesta

1

En decimal, 1234, 01234, 0000000001234, etc., todos representan el mismo número. La representación única de diez dígitos de ese número es 0000001234.

Del mismo modo, la representación única de 56 dígitos de base-2 de 56 (decimal) es 000000000000000000000000000000000000000000000000000000111000. Así que tu conjetura es correcta.

Pero has cometido otros dos errores. Primero, siempre se agrega al menos un poco de relleno. Su mensaje tiene una longitud de 448 bits, por lo que se deben agregar 512 bits de relleno para que su longitud sea congruente con 448 (mod 512). Segundo, la longitud de 64 bits es la longitud en bits, no en bytes. En total, a su mensaje de 448 bits le siguen 10000 ... 0000111000000, para una longitud total de 1024 bits.

    
respondido por el benrg 10.03.2016 - 03:09
fuente

Lea otras preguntas en las etiquetas