La lunghezza a 64-bit della stringa originale è anch'essa riempita con l'hash MD5?

5

Quindi, ad esempio, ho una stringa il cui valore binario è esattamente 512 - 64 bit, quindi la conversione binaria della stringa non deve essere riempita. Ciò significa che ho una stringa di 56 caratteri.

L'equivalente binario di 56 è 00111000 , che è 64 - 8 corto di 64 bit. Come vengono riempiti i bit rimanenti? Sono anche imbottiti?

Questo è ciò che accade quando si riempie la stringa:

The message is "padded" (extended) so that its length (in bits) is congruent to 448, modulo 512. That is, the message is extended so that it is just 64 bits shy of being a multiple of 512 bits long. Padding is always performed, even if the length of the message is already congruent to 448, modulo 512.

Padding is performed as follows: a single "1" bit is appended to the message, and then "0" bits are appended so that the length in bits of the padded message becomes congruent to 448, modulo 512. In all, at least one bit and at most 512 bits are appended.

da qui .

Tuttavia, nello stesso documento, non viene fornito alcun chiarimento sui restanti bit "vuoti" (512 - 56 * 8 - 8):

A 64-bit representation of b (the length of the message before the padding bits were added) is appended to the result of the previous step. In the unlikely event that b is greater than 2^64, then only the low-order 64 bits of b are used. (These bits are appended as two 32-bit words and appended low-order word first in accordance with the previous conventions.)

At this point the resulting message (after padding with bits and with b) has a length that is an exact multiple of 512 bits. Equivalently, this message has a length that is an exact multiple of 16 (32-bit) words. Let M[0 ... N-1] denote the words of the resulting message, where N is a multiple of 16.

Spero che la mia domanda sia compresa?

La mia ipotesi è che i 64 bit ( 00111000 ) 0 siano riempiti di fronte alla rappresentazione a 64 bit della lunghezza.

    
posta Thomas W 03.10.2015 - 10:15
fonte

1 risposta

1

In decimale, 1234, 01234, 0000000001234 e così via rappresentano tutti lo stesso numero. La rappresentazione a dieci cifre unica di quel numero è 0000001234.

Allo stesso modo, l'esclusiva rappresentazione in 64 cifre di base di 56 (decimale) è 0000000000000000000000000000000000000000000000000000000000111000. Quindi la tua ipotesi è corretta.

Ma hai fatto altri due errori. Innanzitutto, viene sempre aggiunto almeno un bit di padding. Il tuo messaggio è lungo 448 bit, quindi è necessario aggiungere 512 bit di padding a una lunghezza congruente a 448 (mod 512). In secondo luogo, la lunghezza di 64 bit è la lunghezza in bit, non i byte. Quindi, in tutto, il tuo messaggio a 448 bit è seguito da 10000 ... 0000111000000, per una lunghezza totale di 1024 bit.

    
risposta data 10.03.2016 - 03:09
fonte

Leggi altre domande sui tag