Generator skrótów (hash)

Skróty MD5, SHA-1 i SHA-2 oraz HMAC tekstu lub plików.

O tym narzędziu

Oblicz MD5, SHA-1, SHA-256, SHA-384 i SHA-512 dowolnego tekstu lub pliku albo HMAC z tajnym kluczem. Pliki są czytane lokalnie i nigdy nie są wysyłane, więc narzędzie sprawdza się też przy weryfikacji sum kontrolnych pobranych plików.

Jak z tego korzystać

  1. Wybierz Tekst lub Plik jako dane wejściowe.
  2. Wpisz tekst lub upuść plik. Pliki są czytane lokalnie i nigdy nie są wysyłane.
  3. Odczytaj MD5, SHA-1, SHA-256, SHA-384 i SHA-512 naraz, szesnastkowo lub w Base64.
  4. Dla podpisanych wiadomości włącz HMAC i wpisz tajny klucz.

Pytania

Jak zweryfikować pobrany plik?
Wybierz Plik, upuść pobrany plik i porównaj wartość SHA-256 z sumą kontrolną opublikowaną przez projekt. Jeśli różni się choćby jeden znak, plik nie jest taki sam.
Czy mogę używać MD5 lub SHA-1 do haseł?
Nie. Są za szybkie i mają znane słabości. Przechowuj hasła z użyciem wolnej funkcji skrótu do haseł, takiej jak Argon2, bcrypt lub scrypt.
Czym jest HMAC?
Skrót (hash) połączony z tajnym kluczem. Dowodzi, że wiadomość pochodzi od kogoś, kto zna klucz, i nie została zmieniona. W ten sposób podpisywane są webhooki z usług takich jak Stripe i GitHub.
Dlaczego mój skrót różni się od wyniku innego narzędzia?
Zwykle z powodu niewidocznych różnic w danych wejściowych: znaku nowej linii na końcu, windowsowych zakończeń linii albo innego kodowania tekstu. Tutaj tekst jest zawsze haszowany jako UTF-8 dokładnie tak, jak go wpisano.
Czy hash można odszyfrować lub odwrócić?
Nie. Hash to nie szyfrowanie i nie ma klucza, który by go cofnął. Strony oferujące „odszyfrowanie MD5” szukają wartości w ogromnych tabelach hashy popularnych ciągów. Z tego samego powodu hashe bez soli z krótkich danych, takich jak hasła czy numery telefonów, nie anonimizują danych.
Jak zweryfikować podpis HMAC webhooka?
Włącz HMAC, wpisz sekret do podpisywania i wklej surową treść żądania dokładnie w takiej postaci, w jakiej przyszła, a potem porównaj wartość HMAC-SHA256 w hex z nagłówkiem podpisu. GitHub wysyła ją w X-Hub-Signature-256 po prefiksie sha256=. Przeformatowany JSON daje inny wynik, a niektórzy dostawcy podpisują też znacznik czasu, więc sprawdź ich dokumentację.
Jak rozpoznać, jaki algorytm wygenerował hash?
Spójrz na jego długość w hex. MD5 ma 32 znaki, SHA-1 40, SHA-256 64, SHA-384 96, a SHA-512 128. Długość nie dowodzi algorytmu, bo inne funkcje skrótu mają takie same rozmiary, ale szybko zawęża wybór. Aby się upewnić, zahaszuj tutaj znane dane wejściowe.

Co to jest funkcja skrótu (hash)?

Kryptograficzna funkcja skrótu zamienia dane wejściowe dowolnego rozmiaru w skrót o stałej długości. SHA-256 zawsze daje 256 bitów, pokazywanych jako 64 znaki szesnastkowe, niezależnie od tego, czy haszujesz jedno słowo, czy plik 4 GB. Te same dane zawsze dają ten sam hash, a zmiana jednego bitu zmienia mniej więcej połowę wyniku. Hasha nie da się odwrócić, by odzyskać dane wejściowe; można tylko haszować kolejne próby i porównywać wyniki.

Dobry hash jest też odporny na kolizje: znalezienie dwóch danych wejściowych o tym samym skrócie powinno być praktycznie niemożliwe. MD5 i SHA-1 straciły tę właściwość. Prawdziwą kolizję SHA-1 opublikowano w 2017 roku (SHAttered), a kolizje MD5 znajduje się na laptopie w kilka sekund. Oba nadal wystarczą do wykrywania przypadkowych uszkodzeń, ale do podpisów, wykrywania manipulacji i wszystkiego, przy czym może działać atakujący, używaj SHA-256 lub SHA-512.

Jak uzyskać ten sam hash SHA-256 w wierszu poleceń?

Aby porównać wynik z wartością z terminala, haszuj dokładnie te same bajty. W Linuksie uruchom sha256sum file.iso, w macOS shasum -a 256 file.iso, a w Windows PowerShell Get-FileHash file.iso, które domyślnie używa SHA-256. Dla MD5 polecenia to md5sum, md5 i Get-FileHash -Algorithm MD5. PowerShell wypisuje hex wielkimi literami, więc włącz tu Wielkie litery, jeśli chcesz, by obie wartości wyglądały identycznie.

W przypadku tekstu pamiętaj, że echo dodaje znak nowej linii, więc echo hello | sha256sum haszuje sześć bajtów, a nie pięć. Użyj printf hello | sha256sum albo echo -n, aby dostać to samo, co dla tekstu wpisanego tutaj; licznik bajtów nad polem tekstowym potwierdza dokładne dane wejściowe. Niektóre systemy, np. atrybuty Subresource Integrity, oczekują skrótu w Base64, a nie w hex. Przełącz kodowanie wyniku, aby dostać go bez ręcznej konwersji.

MD5, SHA-1, SHA-256 czy SHA-512: jaki hash wybrać?

W nowych projektach domyślnym wyborem jest SHA-256: szybki, wszędzie obsługiwany i bez znanych praktycznych ataków. SHA-512 daje dłuższy skrót i na 64-bitowych procesorach często jest szybszy niż SHA-256, co pomaga przy dużych plikach. SHA-384 to skrócony SHA-512 z innymi wartościami początkowymi, popularny w TLS i Subresource Integrity. MD5 i SHA-1 zostaw dla starszych systemów i sum kontrolnych niezwiązanych z bezpieczeństwem, np. do porównania pliku ze starą opublikowaną sumą MD5.

Do uwierzytelniania wiadomości, np. payloadu webhooka, używaj HMAC zamiast haszować sekret razem z wiadomością. Zwykły SHA-256 z sekretu i wiadomości jest podatny na ataki length extension, którym HMAC ma zapobiegać. Hasła wymagają zamiast tego wolnego algorytmu z solą, takiego jak Argon2id czy bcrypt. Do losowych identyfikatorów i tajnych tokenów używaj narzędzi Generator UUID lub Generator haseł, a nie hasha.

Coś nie działa albo wynik wygląda na błędny? Zgłoś problem z tym narzędziem