Lunghezza massima per ingresso / uscita MD5


Risposte:


240

MD5 elabora un messaggio di lunghezza arbitraria in un output a lunghezza fissa di 128 bit, generalmente rappresentato come una sequenza di 32 cifre esadecimali.


95
Nota per sé: lunghezza hash MD5 = 128 bits= 16 bytes=32 hex digits
checksum

2
[Una normale modifica] 32 cifre esadecimali e la stringa contiene solo parole di 'az' e cifre di '0-9'
v1h5

1
Ho notato un piccolo errore nei commenti precedenti. Il testo dovrebbe essere come citato :) "32 cifre esadecimali e la stringa contiene solo lettere di" az "e cifre di" 0-9 ""
Remis B

2
@Shafizadeh Come afferma la risposta, l'input ha una lunghezza arbitraria. Ciò significa che il parametro può essere di qualsiasi lunghezza necessaria.
kdojeteri,

1
@Peping Una piccola correzione: l'ingresso può essere lungo quanto il tipo di dati utilizzato nel linguaggio di programmazione utilizzato può essere. Esempio: le stringhe di Java utilizzano un array internamente, pertanto una stringa può contenere solo (2 ^ 31) -1 caratteri (o meno, a seconda della dimensione dell'heap). Sarebbe anche l'input massimo per la funzione MD5 in Java. Ma in teoria, la funzione MD5 potrebbe effettivamente elaborare un input di lunghezza arbitraria. ;)
RicoBrassers,

38

Aggiungi lunghezza

Una rappresentazione a 64 bit di b (la lunghezza del messaggio prima dell'aggiunta dei bit di riempimento) viene aggiunta al risultato del passaggio precedente. Nel caso improbabile che b sia maggiore di 2 ^ 64, vengono utilizzati solo i 64 bit di ordine inferiore di b.

  • L'hash è sempre 128 bit. Se lo codifichi come una stringa esadecimale, puoi codificare 4 bit per carattere, dando 32 caratteri.
  • MD5 non è la crittografia. In generale non è possibile "decodificare" un hash MD5 per ottenere la stringa originale.

Vedi di più qui .


La lunghezza del messaggio è illimitata , cosa intendi per messaggio ? È input? La mia domanda èMD5("how many characters exactly?");
Shafizadeh,

@Shafizadeh Il tuo input può essere il più lungo possibile nel tuo attuale linguaggio di programmazione, in Java ci sarebbero (2 ^ 31) -1 caratteri in una stringa. E sì, il "messaggio" è l'input.
RicoBrassers,

@Shafizadeh ... o da un file, l'input potrebbe essere grande quanto l'archiviazione disponibile.
ToolmakerSteve

9

Puoi avere qualsiasi lunghezza, ma ovviamente ci può essere un problema di memoria sul computer se l'input String è troppo lungo. L'output è sempre di 32 caratteri.


4
Se l'input della stringa è troppo lungo, in primo luogo non esisterebbe nel sistema, a meno che non sia in un file, nel qual caso è possibile passare blocchi alla funzione digest mentre vengono letti, in altre parole, è necessario solo avere blockbyte dell'ingresso disponibili alla volta.
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

6

L'algoritmo è stato progettato per supportare una lunghezza di input arbitraria. Cioè puoi calcolare hash di file di grandi dimensioni come ISO di un DVD ...

Se esiste una limitazione per l'input, potrebbe provenire dall'ambiente in cui viene utilizzata la funzione hash. Supponiamo che tu voglia calcolare un file e che l'ambiente abbia un limite MAX_FILE.

Ma la stringa di output sarà sempre la stessa: 32 caratteri esadecimali (128 bit)!


4

Un hash MD5 a 128 bit è rappresentato come una sequenza di 32 cifre esadecimali.


4

È possibile che si desideri utilizzare SHA-1 anziché MD5 , poiché MD5 è considerato non funzionante.

Puoi leggere di più sulle vulnerabilità di MD5 in questo articolo di Wikipedia .


5
questa non è altro che una voce. MD5 è abbastanza buono per la maggior parte delle consuete attività di sviluppo web
Il tuo senso comune

11
Il suo creatore, così come Bruce Schneier e Homeland Security sono d'accordo sul fatto che sia rotto ... Di quanti altri "rumorscovering" hai bisogno per convincerti che in realtà è stato rotto da qualche tempo? Il fatto è che è arbitrariamente facile trovare un input che generi un hash specifico. Ovviamente puoi mitigare questo rischio salando i tuoi input, usando sali sufficientemente grandi. Nota a margine: SHA-1 è considerato altrettanto rotto. Se si consiglia alle persone di eseguire l'aggiornamento, si consiglia loro di eseguire l'aggiornamento a SHA-2, per favore.
Kander,

3
@kander oh ne ho bisogno molto poco. Un esempio. Dato un hash, porterai una stringa sorgente? Non un link ad alcuni grandi articoli, non l'opinione di qualcuno ma solo una stringa sorgente?
Il tuo buon senso

2
Nessuno ha veramente menzionato cosa significano realmente con il termine "rotto". Anche se @YourCommonSense ha un senso.
JSmyth,

4
Stai parlando degli usi di sicurezza di MD5. Ma MD5 (o qualsiasi altra tecnica di hashing) ha molti altri usi. Io, per esempio, voglio usarlo per rinominare un file con il suo hash. Non sono sicuramente preoccupato per la resistenza alle collisioni dell'MD5. Tutto ciò che hai pubblicato è ancora vero, solo i miei 2 centesimi.
Tfrascaroli,

3

Non c'è limite all'input di md5 che conosco. Alcune implementazioni richiedono che l'intero input sia caricato in memoria prima di passarlo nella funzione md5 (ovvero, l'implementazione agisce su un blocco di memoria, non su un flusso), ma questo non è un limite dell'algoritmo stesso. L'output è sempre di 128 bit. Nota che md5 non è un algoritmo di crittografia, ma un hash crittografico. Ciò significa che è possibile utilizzarlo per verificare l'integrità di un blocco di dati, ma non è possibile invertire l'hash. Nota anche che md5 è considerato rotto, quindi non dovresti usarlo per nulla legato alla sicurezza (va comunque bene verificare l'integrità dei file scaricati e simili).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.