Generator hash MD5, SHA-1 i SHA-256

Hash MD5, SHA-1 i SHA-256 liczy się tu lokalnie, także dla dużych plików. MD5 i SHA-1 nie nadają się już do haseł ani podpisów cyfrowych.

Wszystko liczy się w Twojej przeglądarce - tekst, klucz i plik nie opuszcza tego urządzenia.

Skąd wziąć dane
Źródło danych

Dane wejściowe
Algorytmy
    Porównanie z oczekiwaną wartością
    Wklej wartość odniesienia, a sprawdzimy, czy któryś ze skrótów ją potwierdza.
    Właściwości algorytmów
    AlgorytmBityOcena
    MD5128złamany
    SHA-1160złamany
    SHA-256256bezpieczny
    SHA-384384bezpieczny
    SHA-512512bezpieczny

    „Złamany” znaczy, że istnieje praktyczna metoda znalezienia dwóch różnych danych o tym samym skrócie. Do sprawdzenia, czy plik pobrał się w całości, MD5 nadal wystarcza, do podpisów i haseł nie.

    Wartości kontrolne
    MD5 („abc”)900150983cd2…
    SHA-1 („abc”)a9993e364706…
    SHA-256 („abc”)ba7816bf8f01…
    MD5 (pusty ciąg)d41d8cd98f00…

    Te wartości pochodzą z dokumentów RFC opisujących algorytmy. Kliknij „Wstaw «abc»”, żeby sprawdzić, czy narzędzie liczy poprawnie.

    Jak używać

    1. Wpisz tekst w pole na górze, a hash przeliczy się na bieżąco, bez klikania przycisku.
    2. Zaznacz algorytmy, których potrzebujesz. Domyślnie liczymy MD5, SHA-1 i SHA-256, a SHA-384 i SHA-512 włączysz jednym kliknięciem.
    3. Przy każdym wyniku jest przycisk kopiowania. Przełącznik „Wynik wielkimi literami” przydaje się, gdy porównujesz z systemem, który zapisuje sumy wersalikami.
    4. Hash pliku policzysz po przełączeniu na „Z pliku” i wskazaniu go w oknie wyboru. Plik jest czytany porcjami, więc jego rozmiar nie ma znaczenia.
    5. Wklej sumę kontrolną podaną przez wydawcę w pole „Porównanie z oczekiwaną wartością”. Zielony komunikat oznacza zgodność, czerwony sygnalizuje, że plik różni się od oryginału.
    6. Zaznacz „HMAC”, jeśli chcesz policzyć skrót z kluczem. Pojawi się dodatkowe pole na klucz, a wyniki zmienią się na wartości HMAC.

    Wskazówki

    • Zmiana jednego znaku przestawia cały wynik i nazywa się to efektem lawinowym. Dopisanie spacji na końcu tekstu daje zupełnie inny hash, więc przy porównywaniu sum sprawdź, czy nie skopiowałeś przypadkowego znaku razem z wartością odniesienia.
    • MD5 policzyliśmy własną implementacją zgodną z RFC 1321, bo przeglądarki nie udostępniają tego algorytmu. Rodzina SHA korzysta z wbudowanego crypto.subtle.digest, czyli z kodu samej przeglądarki.
    • Suma kontrolna pliku nie zależy od jego nazwy ani daty. Ten sam plik pobrany dwa razy pod różnymi nazwami ma identyczny hash i właśnie dlatego nadaje się do weryfikacji pobrania.
    • Algorytm HMAC miesza klucz z danymi dwukrotnie, więc wytrzymuje atak, w którym napastnik dopisuje własną treść do przechwyconej wiadomości. Skrót z kluczem doklejonym z przodu takiej odporności nie ma.
    • Funkcje skrótu nie nadają się do przechowywania haseł, nawet SHA-512, bo karta graficzna liczy miliardy skrótów na sekundę. Do haseł służą wolne funkcje z solą, czyli bcrypt, scrypt, PBKDF2 i Argon2.

    Potrzebujesz losowych wartości zamiast skrótów? Skorzystaj z generatora haseł albo generatora UUID.

    Co liczy generator hash i czym jest funkcja skrótu

    Funkcja skrótu zamienia dane dowolnej długości na ciąg o stałej długości. MD5 zawsze zwraca 128 bitów zapisanych jako 32 znaki szesnastkowe, a SHA-256 daje 256 bitów, czyli 64 znaki. Ta sama treść zawsze daje ten sam hash, a najmniejsza zmiana wejścia zmienia wynik nie do poznania. Kryptograficzna funkcja skrótu dokłada do tego wymóg, żeby z samego wyniku nie dało się odtworzyć wejścia ani dobrać drugiego zestawu danych o identycznej wartości.

    Najczęstsze praktyczne zastosowanie to sprawdzenie integralności danych, czyli tego, czy pobrany plik jest identyczny z tym, który opublikował wydawca. Dystrybucje Linuksa i duże instalatory publikują obok pliku jego sumę SHA-256. Policz hash lokalnie i porównaj oba ciągi znak po znaku albo wklej wartość odniesienia do pola porównania w tym narzędziu.

    W kodzie ten sam wynik daje jedna linia, bo PHP ma funkcję hash('sha256', ...), MySQL i PostgreSQL wbudowane MD5(), a Python moduł hashlib, przy czym nazwy algorytmów zapisuje się w bibliotekach bez łącznika i SHA-1 występuje tam jako sha1. Kolumna z wynikiem MD5() bywa w starszych bazach używana do haseł i jest to dziś podatność, którą łata się przejściem na password_hash() z bcryptem.

    Dlaczego hashe MD5 i SHA-1 uznano za złamane

    Bezpieczna funkcja skrótu musi utrudniać znalezienie dwóch różnych danych dających ten sam wynik, a taka para nazywa się kolizją. Dla MD5 kolizje potrafi wygenerować zwykły komputer w kilka sekund, a pierwsze praktyczne ataki opisano już w 2004 roku. SHA-1 wytrzymał dłużej, ale w 2017 roku zespół badaczy pokazał kolizję dwóch różnych plików PDF, a w 2020 roku ogłoszono atak, który dobiera kolizję do wybranego z góry prefiksu.

    Konsekwencja praktyczna jest taka, że hash MD5 nie dowodzi, od kogo plik pochodzi, bo złośliwy plik można spreparować tak, by miał tę samą sumę co plik nieszkodliwy. Do wykrycia zwykłego uszkodzenia przy transmisji MD5 wciąż wystarcza, bo losowy błąd na pewno zmieni skrót. Granica przebiega między wykrywaniem przypadkowego błędu a wykrywaniem celowej podmiany i to ona rozstrzyga, czy suma MD5 cokolwiek w danej sytuacji potwierdza.

    Czym jest HMAC i kiedy się go używa

    Zwykły hash nie ma sekretu, bo policzyć go może każdy. HMAC dodaje klucz, a wynik odtworzy wyłącznie ten, kto ten klucz zna. Algorytm opisany w RFC 2104 liczy skrót dwukrotnie, najpierw z kluczem uzupełnionym stałą wewnętrzną, potem z kluczem uzupełnionym stałą zewnętrzną. Ta konstrukcja chroni przed atakiem, w którym napastnik dopisuje własną treść do przechwyconej wiadomości.

    W praktyce spotkasz HMAC wszędzie tam, gdzie dwa systemy muszą sprawdzić autentyczność komunikatu, czyli w podpisach webhooków od bramek płatniczych, w tokenach JWT z algorytmem HS256, w podpisywaniu zapytań do interfejsów chmurowych i w podpisanych ciasteczkach sesyjnych. HMAC z MD5 wypada zauważalnie lepiej niż samo MD5, bo ataki kolizyjne nie przenoszą się bezpośrednio na konstrukcję z kluczem, choć do nowych rozwiązań stosuje się HMAC-SHA256.

    Hash pliku, czyli po co czytać go porcjami

    Wczytanie kilkugigabajtowego pliku do pamięci naraz zwykle kończy się zawieszeniem karty przeglądarki. Dlatego plik jest tutaj dzielony na porcje po 4 MB, a stan funkcji skrótu przenosi się między nimi. Ten sposób pracy nazywa się przetwarzaniem strumieniowym i robią to samo narzędzia systemowe w rodzaju sha256sum i sha1sum.

    Dla rodziny SHA przeglądarka udostępnia tylko interfejs jednorazowy, który wymaga całej zawartości naraz, więc przy dużych plikach liczymy hash przyrostowo tam, gdzie to możliwe, a pozostałe algorytmy przetwarzamy po zbuforowaniu porcji. Pasek postępu pod polem wyboru pliku pokazuje, ile już przeczytano.

    Dlaczego hash nie nadaje się do przechowywania haseł

    Funkcje skrótu zaprojektowano tak, żeby były szybkie. To zaleta przy sumach kontrolnych i wada przy hasłach, bo współczesna karta graficzna liczy dziesiątki miliardów skrótów SHA-256 na sekundę, a przejście przez wszystkie hasła ośmioznakowe jest wtedy kwestią godzin. Dodanie soli utrudnia użycie gotowych tablic, ale nie spowalnia samego liczenia.

    Do haseł stosuje się funkcje celowo powolne, a w nowszych konstrukcjach też pamięciożerne, czyli bcrypt, scrypt, PBKDF2 i Argon2, który wygrał konkurs Password Hashing Competition w 2015 roku. Ich parametry dobiera się tak, żeby pojedyncze sprawdzenie hasła trwało kilkadziesiąt milisekund. Dla użytkownika to czas niezauważalny, dla atakującego to różnica między godzinami a stuleciami.

    Najczęstsze pytania

    Czy mój plik albo tekst jest wysyłany na serwer?

    Nie, wszystko liczy Twoja przeglądarka. Rodzinę SHA obsługuje wbudowane crypto.subtle, a MD5 implementacja zawarta w skrypcie tej strony. Plik jest czytany lokalnie przez FileReader, więc w zakładce „Sieć” w narzędziach deweloperskich nie zobaczysz żadnego zapytania po jego wskazaniu.

    Czym jest hash MD5?

    MD5 to funkcja skrótu opisana w RFC 1321 z 1992 roku, która z dowolnych danych robi 128-bitowy wynik zapisywany jako 32 znaki szesnastkowe. Dla tekstu „abc” hash MD5 ma wartość 900150983cd24fb0d6963f7d28e17f72 i jest ona identyczna na każdym systemie. Dziś MD5 służy już tylko do wykrywania przypadkowych uszkodzeń pliku, bo kolizję da się dla niego wyliczyć w kilka sekund.

    Czy da się odwrócić hash i odzyskać oryginalny tekst?

    Matematycznie się nie da, bo skrót ma stałą długość i traci informację. Krótkie i popularne hasła bywają jednak odnajdywane w gotowych tablicach wyników, więc sam hash hasła, bez soli i bez spowolnienia, nie chroni użytkowników serwisu.

    Czym różni się SHA-256 od SHA-512?

    Obie funkcje należą do rodziny SHA-2. SHA-256 pracuje na słowach 32-bitowych i zwraca 64 znaki szesnastkowe, SHA-512 pracuje na słowach 64-bitowych i zwraca 128 znaków. Na procesorach 64-bitowych SHA-512 bywa szybszy od SHA-256, mimo dłuższego wyniku. Do sum kontrolnych plików wystarcza SHA-256, a SHA-512 wybiera się wtedy, gdy wymaga tego norma albo przyjęta polityka bezpieczeństwa.

    Który algorytm wybrać?

    Do sprawdzenia poprawności pobranego pliku wybierz SHA-256. Ze starym systemem, który wymaga MD5, zostań przy MD5, ale ze świadomością jego ograniczeń. Do podpisywania i uwierzytelniania służy HMAC-SHA256. SHA-384 i SHA-512 mają sens tam, gdzie wymaga tego norma albo polityka bezpieczeństwa, bo w codziennych zastosowaniach dłuższy wynik niczego nie poprawia.

    Co robi generator hash online?

    Generator hash przyjmuje tekst albo plik i zwraca wynik zaznaczonych algorytmów, tutaj MD5, SHA-1, SHA-256, SHA-384 i SHA-512, opcjonalnie w wariancie HMAC z kluczem. Słowo „online” dotyczy samego dostępu przez przeglądarkę, bo liczenie odbywa się na Twoim urządzeniu i dane nie trafiają na serwer. Wynik możesz od razu porównać z sumą kontrolną podaną przez wydawcę pliku.

    Dlaczego mój wynik różni się od tego z innego narzędzia?

    Najczęściej odpowiada za to różnica w danych wejściowych, a nie w algorytmie. Sprawdź, czy na końcu tekstu nie ma spacji albo znaku końca linii i czy oba narzędzia kodują tekst tak samo, bo my używamy UTF-8. Hash pliku liczy się z bajtów, więc tam różnic nie ma.

    Co oznacza czerwony wynik w porównaniu sum?

    Oznacza, że policzony skrót nie zgadza się z wartością, którą wkleiłeś. Pobieranie mogło zostać przerwane, plik może pochodzić z innej wersji, wartość odniesienia może dotyczyć innego algorytmu, w najgorszym wypadku plik został podmieniony. Zanim wyciągniesz wnioski, sprawdź, czy porównujesz właściwy algorytm, bo sumy MD5 i SHA-256 mają różną długość.

    Czy mogę policzyć hash hasła, żeby bezpiecznie je przechować?

    Sam skrót hasła to zła metoda, bo funkcje skrótu są zbyt szybkie. Użyj bcrypt, scrypt albo Argon2 z parametrami dobranymi do mocy serwera, a w PHP wystarczy do tego password_hash(). To narzędzie liczy sumy kontrolne i sprawdza integralność danych, więc do budowania systemu logowania go nie używaj.