2012-03-14 18 views
10

Ho bisogno di capire l'algoritmo hash Md5. Stavo leggendo un documenti e si affermaPadding in MD5 Hash Algorithm

"Il messaggio è 'imbottita' (estesa) in modo che la sua lunghezza (in bit) è congruente a 448, modulo 512. Cioè, il messaggio viene esteso in modo che è a soli 64 bit di un multiplo di 512 bit. Il riempimento viene sempre eseguito, anche se la lunghezza del messaggio è già congruente a 448, modulo 512. "

Ho bisogno di capire cosa significa in termini semplici, in particolare il modulo 448 512. La parola MODULO è il problema. Per favore apprezzerò semplici esempi a questo. Divertente però, questo è il primo passo verso l'hash MD5! :)

Grazie

risposta

10

Modulo o mod, è una funzione che si traduce in ti dice il resto quando due numeri sono divisi gli uni dagli altri.

Ad esempio:

5 modulo 3:

5/3 = 1, 2 con resto. Quindi 5 mod 3 è 2.

10 modulo 16 = 10, perché 16 non possono essere eseguiti.

15 modulo 5 = 0, perché 15 entra in 5 esattamente 3 volte. 15 è un multiplo di 5.

Ritorno a scuola lo avresti imparato come "Remainder" o "Left Over", modulo è solo un modo elegante per dirlo.

Ciò che viene detto qui è che quando si utilizza MD5, una delle prime cose che succede è che si riempie il messaggio in modo che sia abbastanza lungo. Nel caso di MD5, il tuo messaggio deve essere n bit, dove n = (512 * z) +448 e z è un qualsiasi numero.

Ad esempio, se si avesse un file lungo 1472 bit, sarebbe possibile utilizzarlo come hash MD5, perché 1472 modulo 512 = 448. Se il file era lungo 1400 bit, si è necessario inserire un extra di 72 bit prima di poter eseguire il resto dell'algoritmo MD5.

0

Modulus è il restante di divisione. Nell'esempio

512 mod 448 = 64 
448 mod 512 = 448 

Un altro approccio di 512 mod 448 sarebbe quello di dividerli 512/448 = 1.142 ..

Poi si sottrae 512 a partire dal numero di punti risultato prima moltiplicato per 448:

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

Che cosa è necessario sapere che 448 è 64 bit più corto di più 512.

Ma cosa succede se tra 448 e 512 ??

Normalmente dobbiamo sottrarre 448 per x (risultato del modulo).

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

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

Quindi questa soluzione problema sarebbe prendere più alto di 512 ma ancora più corto di 64;

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

Questo accade perché poi abbiamo bisogno di aggiungere 64 bit messaggio originale e la lunghezza devono essere multipli di 512.

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