Maksymalna długość wejścia / wyjścia MD5

164

Jaka jest maksymalna długość ciągu, który może zhaszować md5? Lub: Jeśli nie ma ograniczeń, a jeśli tak, to jaka będzie maksymalna długość wartości wyjściowej md5?

Arun David
źródło
2
Śledź wiki: en.wikipedia.org/wiki/MD5
Frank,

Odpowiedzi:

240

MD5 przetwarza wiadomość o dowolnej długości na 128-bitowe wyjście o stałej długości, zazwyczaj reprezentowane jako sekwencja 32 cyfr szesnastkowych.

Daniel Vassallo
źródło
95
Uwaga dla siebie: długość skrótu MD5 = 128 bits= 16 bytes=32 hex digits
suma kontrolna
2
[Normalna edycja] 32 cyfry szesnastkowe, a ciąg zawiera tylko słowa z „az” i cyfry od „0-9”
v1h5
1
Zauważyłem mały błąd w poprzednich komentarzach. Tekst powinien być cytowany w cudzysłowie :) „32 cyfry szesnastkowe, a ciąg zawiera tylko litery z„ az ”i cyfry od„ 0-9 ””
Remis B
2
@Shafizadeh Zgodnie z odpowiedzią, dane wejściowe mają dowolną długość. Oznacza to, że parametr może mieć dowolną długość.
kdojeteri
1
@Peping Mała poprawka: dane wejściowe mogą być tak długie, jak używany może być typ danych w używanym języku programowania. Przykład: ciągi Java używają tablicy wewnętrznie, dlatego ciąg może zawierać tylko (2 ^ 31) -1 znaków (lub mniej, w zależności od rozmiaru sterty). Byłoby to również maksymalnym wejściem dla funkcji MD5 w Javie. Ale czysta teoretycznie funkcja MD5 mogłaby rzeczywiście przetworzyć dane wejściowe o dowolnej długości. ;)
RicoBrassers
38

Dołącz długość

64-bitowa reprezentacja b (długość komunikatu przed dodaniem bitów wypełniających) jest dołączana do wyniku poprzedniego kroku. W mało prawdopodobnym przypadku, gdy b jest większe niż 2 ^ 64, wówczas używane są tylko najniższe 64 bity b.

  • Hash ma zawsze 128 bitów. Jeśli zakodujesz go jako ciąg szesnastkowy, możesz zakodować 4 bity na znak, co daje 32 znaki.
  • MD5 nie jest szyfrowaniem. Generalnie nie można „odszyfrować” skrótu MD5 w celu uzyskania oryginalnego ciągu.

Zobacz więcej tutaj .

Mark Byers
źródło
Długość wiadomości jest nieograniczona , co masz na myśli wiadomość ? Czy to wejście? Moje pytanie brzmiMD5("how many characters exactly?");
Shafizadeh
@Shafizadeh Twoje dane wejściowe mogą być tak długie, jak to możliwe w Twoim obecnym języku programowania, w Javie byłoby to (2 ^ 31) -1 znaków w ciągu. I tak, „wiadomość” to wejście.
RicoBrassers
@Shafizadeh ... lub z pliku, dane wejściowe mogą być tak duże, jak dostępna pamięć.
ToolmakerSteve
9

Możesz mieć dowolną długość, ale oczywiście może wystąpić problem z pamięcią na komputerze, jeśli wejście String jest zbyt długie. Dane wyjściowe mają zawsze 32 znaki.

Vidar Vestnes
źródło
4
Jeśli ciąg wejściowy jest zbyt długi, nie istniałby w systemie w pierwszej kolejności, chyba że znajduje się w pliku, w takim przypadku możesz przekazać bloki do funkcji skrótu w trakcie ich odczytu, innymi słowy, potrzebujesz tylko mieć dostępne jednocześnie blockbajty wejścia.
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
6

Algorytm został zaprojektowany do obsługi dowolnej długości wejściowej. Oznacza to, że możesz obliczyć skróty dużych plików, takich jak ISO płyty DVD ...

Jeśli istnieje ograniczenie dotyczące danych wejściowych, może ono pochodzić ze środowiska, w którym używana jest funkcja skrótu. Powiedzmy, że chcesz obliczyć plik, a środowisko ma limit MAX_FILE.

Ale ciąg wyjściowy będzie zawsze taki sam: 32 znaki szesnastkowe (128 bitów)!

Kami
źródło
4

128-bitowy skrót MD5 jest reprezentowany jako sekwencja 32 cyfr szesnastkowych.

Hamid Nazari
źródło
4

Możesz chcieć użyć SHA-1 zamiast MD5 , ponieważ MD5 jest uważane za uszkodzone.

Więcej informacji na temat luk w zabezpieczeniach MD5 można znaleźć w tym artykule w Wikipedii .

Daniel Vassallo
źródło
5
to tylko plotka. MD5 jest wystarczająco dobry do większości typowych zadań związanych z tworzeniem stron internetowych
Your Common Sense
11
Jego twórca, a także Bruce Schneier i Homeland Security zgadzają się, że jest zepsuty ... Ile jeszcze „plotek” potrzebujesz, aby cię przekonać, że rzeczywiście od jakiegoś czasu jest zepsuty? Faktem jest, że łatwo jest znaleźć dane wejściowe, które generują określony skrót. Oczywiście możesz zmniejszyć to ryzyko, soląc swoje składniki przy użyciu odpowiednio dużych soli. Na marginesie: SHA-1 jest uważany za równie uszkodzony. Jeśli doradzasz ludziom aktualizację, doradzaj im aktualizację do SHA-2, proszę.
kander
3
@kander oh Potrzebuję trochę. Przykład. Biorąc pod uwagę skrót, czy przyniesiesz ciąg źródłowy? Nie jest to link do jakiegoś świetnego artykułu, nie czyjaś opinia, tylko ciąg źródłowy?
Twój zdrowy rozsądek
2
Nikt tak naprawdę nie wspomniał, co tak naprawdę oznaczają pod pojęciem „zepsuty”. Chociaż @YourCommonSense ma sens.
JSmyth
4
Mówisz o zastosowaniach MD5 w zabezpieczeniach. Ale MD5 (lub jakakolwiek inna technika haszowania) ma mnóstwo innych zastosowań. Ja na przykład chcę go użyć do zmiany nazwy pliku według jego skrótu. Na pewno nie martwię się o odporność MD5 na kolizje. Wszystko, co opublikowałeś, jest nadal prawdą, tylko moje 2 centy.
tfrascaroli
3

Nie ma ograniczeń co do danych wejściowych md5, o których wiem. Niektóre implementacje wymagają załadowania całego wejścia do pamięci przed przekazaniem go do funkcji md5 (tj. Implementacja działa na bloku pamięci, a nie na strumieniu), ale nie jest to ograniczenie samego algorytmu. Wyjście ma zawsze 128 bitów. Zauważ, że md5 nie jest algorytmem szyfrowania, ale kryptograficznym hashem. Oznacza to, że możesz go użyć do zweryfikowania integralności fragmentu danych, ale nie możesz odwrócić skrótu. Zauważ również, że md5 jest uważany za uszkodzony, więc nie powinieneś go używać do niczego związanego z bezpieczeństwem (nadal można sprawdzić integralność pobranych plików itp.).

tdammers
źródło