Skip to content

Generator SHA-1 hash (160-bitowy, przestarzały)

Generuj hash SHA-1 online — 40-znakowy wynik hex, bez przesyłania. Narzędzie dla odcisków Git, weryfikacji starych certyfikatów i audytów migracji. Dane nie opuszczają urządzenia.

Bez śledzenia Działa w przeglądarce Bezpłatne
⚠️ SHA-1 to przestarzały algorytm. Do nowych zastosowań używaj SHA-256. Całe hashowanie działa lokalnie — dane nie są przesyłane.
Algorytm
Zweryfikowano poprawność SHA-1 względem wektorów testowych NIST FIPS 180-1; ramowanie dotyczące wycofania zweryfikowane względem NIST SP 800-131A — Zespół inżynierski Go Tools · May 28, 2026

Czym jest SHA-1?

SHA-1 (Secure Hash Algorithm 1) to 160-bitowa kryptograficzna funkcja hash opublikowana przez NIST w 1995 roku jako FIPS 180-1. Została zaprojektowana przez Agencję Bezpieczeństwa Narodowego USA, aby zastąpić SHA-0 (wadliwą wcześniejszą wersję szybko wycofaną w 1993 roku) i była dominującym algorytmem hash dla podpisów cyfrowych, certyfikatów TLS i podpisywania kodu przez lata 2000.

Historia łamań: W 2005 roku zespół Xiaoyun Wang opublikował teoretyczny atak redukujący odporność SHA-1 na kolizje z oczekiwanych 2^80 do 2^63 operacji — teoretyczne złamanie, ale jeszcze niepraktyczne. W lutym 2017 roku Google i CWI Amsterdam opublikowały atak SHAttered, produkując dwa różne dokumenty PDF z identycznymi hashami SHA-1 przy użyciu około 110 GPU-lat obliczeń. Było to definitywne praktyczne złamanie. NIST wycofał już SHA-1 dla podpisów w 2011 roku (NIST SP 800-131A); producenci przeglądarek i urzędy certyfikacji zaprzestały obsługi certyfikatów SHA-1 w latach 2016–2017.

Aktualny status: SHA-1 jest przestarzały we wszystkich zastosowaniach wrażliwych z punktu widzenia bezpieczeństwa — podpisy cyfrowe, odciski certyfikatów, przechowywanie haseł i podpisywanie kodu. Utrzymuje się w formacie identyfikatorów obiektów Git (hashe commitów), gdzie jest używany do adresowania zawartości, a nie bezpieczeństwa, oraz w sumach kontrolnych starszego oprogramowania, gdzie administratorzy jeszcze nie przeprowadzili migracji. Projekt Git dodał obsługę formatu obiektów SHA-256 w wersji 2.29 (październik 2020 roku). Wszystkie nowe projekty powinny używać SHA-256 lub mocniejszego.

Narzędzie oblicza SHA-1 całkowicie w przeglądarce za pomocą crypto.subtle.digest('SHA-1', ...) z Web Crypto API. 40-znakowy wynik hex jest identyczny z tym, co produkuje sha1sum, openssl dgst -sha1 lub git hash-object. Żadne bajty nie są wysyłane na żaden serwer.

SHA-1 a rodzina SHA-2: SHA-1 produkuje 40 znaków hex (160 bitów). SHA-256 produkuje 64 znaki hex (256 bitów) i nie ma znanych słabości. MD5 produkuje 32 znaki hex (128 bitów) i był złamany wcześniej (2004). Do wszelkich nowych prac hashowania SHA-256 jest standardowym wyborem.

// Hash text using Web Crypto API (SHA-1 — legacy use only)
async function sha1(text) {
  const data = new TextEncoder().encode(text);
  const hash = await crypto.subtle.digest('SHA-1', data);
  return Array.from(new Uint8Array(hash))
    .map(b => b.toString(16).padStart(2, '0'))
    .join('');
}

await sha1('Hello, World!');
// → '0a0a9f2a6772942557ab5355d76af442f8f65e01'
// ⚠️ SHA-1 is broken — use SHA-256 for new work.

Przykłady SHA-1

Wyszukanie odcisku commita Git

tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
author A Dev <dev@example.com> 1716854400 +0000
committer A Dev <dev@example.com> 1716854400 +0000

Initial commit

Git przechowuje każdy commit jako obiekt blob, którego SHA-1 oblicza się z nagłówka commita i zawartości w dokładnie tym formacie. 40-znakowy ciąg hex wyświetlany przez `git log` to bezpośredni odcisk SHA-1. Wklej surowy tekst obiektu commita tutaj, aby odtworzyć ten sam hash — przydatne przy debugowaniu wyjścia `git cat-file` lub weryfikacji, że repozytorium lustrzane nie zmodyfikowało historii. Uwaga: Git 2.29+ obsługuje tryb SHA-256 (git init --object-format=sha256), a magazyn obiektów GitHub w końcu zostanie zmigrowany. W nowych repozytoriach preferuj tryb SHA-256.

Weryfikacja odcisku starszego certyfikatu TLS

-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAKlL...
-----END CERTIFICATE-----

Przed 2017 rokiem przeglądarki wyświetlały odciski certyfikatów jako 40-znakowe ciągi hex SHA-1. Urzędy certyfikacji przestały wystawiać certyfikaty podpisane SHA-1 w styczniu 2016 roku, a wszystkie główne przeglądarki usunęły obsługę na początku 2017 roku. Jeśli audytujesz stary wewnętrzny certyfikat lub weryfikujesz starsze urządzenie IoT, wklej treść PEM tutaj, aby odtworzyć odcisk SHA-1 do porównania. Nowoczesne przepływy pracy używają 64-znakowego odcisku SHA-256.

Weryfikacja starego pobrania oprogramowania

node-v0.12.7-linux-x64.tar.gz

Niektóre starsze archiwa oprogramowania nadal publikują wyłącznie sumę kontrolną SHA-1 obok pliku do pobrania. Choć zapewnia to podstawowe wykrywanie uszkodzeń (nie wykrywanie manipulacji), jest lepsze niż brak sumy kontrolnej. Użyj zakładki Plik, aby upuścić archiwum, oblicz SHA-1 i porównaj z wartością opublikowaną przez wydawcę. Jeśli dostępny jest również SHA-256, zawsze preferuj ten drugi. W przypadku nowych archiwów nalegalnie wymagaj sum kontrolnych SHA-256 lub SHA-512.

Demonstracja kolizji SHAttered

(Wklej zawartość pliku shattered-1.pdf firmy Google/CWI przez zakładkę Plik)

W lutym 2017 roku Google i CWI Amsterdam opublikowały atak SHAttered — pierwszą praktyczną kolizję SHA-1. Wyprodukowali dwa różne pliki PDF (shattered-1.pdf i shattered-2.pdf), które dają ten sam hash SHA-1: 38762cf7f55934b34d179ae6a4c80cadccbb7f0a. Upuszczenie któregokolwiek z tych plików PDF do zakładki Plik narzędzia daje dokładnie ten hash, potwierdzając, że kolizja jest realna. Jest to najbardziej wyraźny dowód na to, że SHA-1 jest złamany: dwa różne dokumenty o tym samym odcisku oznaczają, że odcisk nie jest już wiarygodną tożsamością. Używaj SHA-256 we wszystkich nowych przepływach weryfikacji integralności dokumentów.

Jak generować hashe SHA-1

  1. 1

    Wklej tekst lub upuść plik

    Wybierz zakładkę Tekst i wklej dowolny ciąg — wiadomość commita, treść certyfikatu lub dane wejściowe starszej sumy kontrolnej — do obszaru wejściowego. Hash SHA-1 aktualizuje się na bieżąco podczas pisania. W przypadku plików przełącz na zakładkę Plik i przeciągnij dowolny plik do strefy upuszczania; przeglądarka hashuje go lokalnie bez żadnego przesyłania.

  2. 2

    Skopiuj 40-znakowy hash

    Kliknij przycisk Kopiuj obok wyjścia hash. Pełny 40-znakowy ciąg hex małymi literami trafia do schowka. Użyj przełącznika Wielkie litery, jeśli starszy system oczekuje wielkich liter hex — niektóre stare narzędzia i interfejsy API Windows domyślnie używają wielkich liter.

  3. 3

    Porównaj ze starszym odciskiem

    Przełącz na zakładkę Porównaj i wklej dwa hashe SHA-1 obok siebie, aby potwierdzić, że się zgadzają. Przydatne do weryfikacji starszej sumy kontrolnej wydawcy, audytowania lustrzanego repozytorium Git lub sprawdzania starego odcisku certyfikatu TLS z dokumentu sprzed przyjęcia SHA-256.

Szczegóły techniczne

Algorytm: konstrukcja Merkle-Damgård, 80 rund
SHA-1 przetwarza dane wejściowe w blokach 512-bitowych (64-bajtowych), stosując 80 rund operacji bitowych pogrupowanych w cztery etapy po 20 rund, każdy z inną funkcją logiczną (Ch, Parity, Maj, Parity) i stałą addytywną pochodną od pierwiastków kwadratowych małych liczb całkowitych. Początkowy stan hash to pięć 32-bitowych słów (A–E), a ostateczny hash jest konkatenacją tych słów po ostatnim bloku. Implementacja zdefiniowana w FIPS 180-1 (1995), zastąpiona przez FIPS 180-4 (2015), który formalnie zawiera język dotyczący wycofania.
Wyjście: 160 bitów, 40 znaków hex
Zawsze dokładnie 40 małych liter szesnastkowych (160 bitów = 20 bajtów, zakodowanych jako 2 znaki hex na bajt). Długość wyjścia jest stała niezależnie od rozmiaru wejścia. W porównaniu z 64 znakami SHA-256 krótsze wyjście zapewnia mniej bitów odporności na kolizje — kluczowy czynnik, dla którego SHA-1 został złamany przed SHA-256.
Wydajność: szybki, ale to część problemu
SHA-1 jest szybki — zazwyczaj 400–700 MB/s w przeglądarce przy użyciu Web Crypto, porównywalne z SHA-256. Dla atakującego ta szybkość jest atutem: nowoczesny klaster GPU może obliczać miliardy hashy SHA-1 na sekundę, przyspieszając wyszukiwanie metodą brute-force i kolizji. Szybkość jest powodem, dla którego SHA-1 (podobnie jak MD5) nigdy nie może być używany do przechowywania haseł — zamiast tego używaj bcrypt, scrypt lub Argon2.
Standardy: FIPS 180-1 (1995) — przestarzały w kontekście FIPS 180-4
SHA-1 został wystandaryzowany w FIPS 180-1 (1995), zastępując wadliwy SHA-0. NIST wycofał SHA-1 dla podpisów cyfrowych w NIST SP 800-131A (2011) i w FIPS 186-5 (2023) formalnie zakazał go dla wszystkich generowanych podpisów cyfrowych. RFC 6194 (2011) dokumentuje znane kwestie bezpieczeństwa. W3C WebCrypto API nadal zawiera SHA-1 ze względów interoperacyjności ze starszymi systemami, co umożliwia temu narzędziu przeglądarkowemu jego obliczanie.

Najlepsze praktyki

Nigdy nie używaj SHA-1 do operacji wrażliwych z punktu widzenia bezpieczeństwa
SHA-1 jest przestarzały dla podpisów cyfrowych, certyfikatów TLS, podpisywania kodu, przechowywania haseł i każdego przepływu pracy, w którym liczy się odporność na kolizje. Atak SHAttered z 2017 roku zademonstrował praktyczne kolizje. Do wszystkich zastosowań bezpieczeństwa migruj do SHA-256 lub SHA-3. Różnica kosztów jest znikoma na nowoczesnym sprzęcie — SHA-256 jest akcelerowany sprzętowo we wszystkich aktualnych procesorach i potokach GPU.
SHA-1 do wyszukiwania starszych odcisków jest akceptowalny
Jeśli musisz zweryfikować sumę kontrolną pliku sprzed 2017 roku, wyszukać identyfikator commita Git lub zbadać stary odcisk certyfikatu do celów audytowych, SHA-1 jest odpowiedni. Sam hash nie jest używany do podejmowania decyzji o zaufaniu — po prostu odtwarzasz znany odcisk do krzyżowego odniesienia. Udokumentuj to explicite w dziennikach audytu: „SHA-1 użyty wyłącznie do celów odniesienia do starszych systemów, nie do weryfikacji bezpieczeństwa”.
Zawsze hashuj bajty UTF-8, nie punkty kodu Unicode
SHA-1, jak wszystkie algorytmy hash, działa na bajtach, nie na znakach. Ten sam ciąg zakodowany jako UTF-8 vs UTF-16 produkuje różne hashe. Narzędzie zawsze koduje dane wejściowe jako UTF-8 bez BOM przed hashowaniem. Jeśli chcesz dopasować system używający innego kodowania (Windows UTF-16-LE, Latin-1), musisz wstępnie zakodować dane wejściowe zewnętrznie przed porównaniem hashy.
Używaj porównania w stałym czasie podczas weryfikacji hashy w kodzie
Jeśli porównujesz dwa hashe SHA-1 w kodzie, użyj sprawdzania równości w stałym czasie — crypto.timingSafeEqual() w Node.js, hmac.compare_digest() w Pythonie — zamiast naiwnej równości ciągów (=== lub ==). Naiwne porównanie ujawnia informacje o czasie, które teoretycznie mogą pozwolić atakującemu na odtworzenie oczekiwanego hasha bajt po bajcie. Jest to środek ochrony głębokiej nawet dla starszej weryfikacji SHA-1.

Najczęściej zadawane pytania

Czy SHA-1 jest nadal bezpieczny w użyciu?
Nie. SHA-1 był teoretycznie osłabiony w 2005 roku, a w lutym 2017 roku Google i CWI Amsterdam zademonstrował pierwszą praktyczną kolizję za pomocą ataku SHAttered — dwa różne pliki PDF z identycznymi hashami SHA-1. NIST wycofał SHA-1 dla podpisów cyfrowych w 2011 roku (NIST SP 800-131A), a wszystkie główne przeglądarki i urzędy certyfikacji przestały akceptować certyfikaty SHA-1 do 2017 roku. SHA-1 jest złamany dla wszelkich zastosowań wrażliwych z punktu widzenia bezpieczeństwa: podpisy, certyfikaty, przechowywanie haseł. Do wszystkich nowych prac przejdź na SHA-256.
Dlaczego Git nadal używa SHA-1?
Git używa SHA-1 dla identyfikatorów obiektów (hashe commitów, hashe drzew, hashe blobów), ponieważ został zaprojektowany w 2005 roku, gdy SHA-1 był nadal powszechnie zaufany. Użycie przez Git nie jest podpisem kryptograficznym — jest schematem adresowania zawartości stosowanym do wykrywania przypadkowego uszkodzenia, nie celowej manipulacji. Projekt Git migruje od wersji 2.29 (2020), która dodała obsługę --object-format=sha256. GitHub i duże serwisy stopniowo wdrażają tryb SHA-256. Istniejące repozytoria można konwertować, ale migracja jest złożona ze względu na miliardy istniejących identyfikatorów commitów. Na razie identyfikatory commitów SHA-1 pozostają sposobem przechowywania większości historii Git, co czyni to narzędzie użytecznym do krzyżowego sprawdzania hashy obiektów commit.
Czy powinienem migrować z SHA-1 na SHA-256?
Tak, w przypadku każdego systemu wrażliwego z punktu widzenia bezpieczeństwa. Konkretna lista kontrolna migracji: (1) Certyfikaty TLS — jeśli nadal masz certyfikaty podpisane SHA-1, zastąp je natychmiast; urzędy certyfikacji i tak nie wystawią nowych. (2) Podpisy API i HMAC — zastąp HMAC-SHA-256. (3) Hasła przechowywane jako hashe SHA-1 — migruj do bcrypt lub Argon2. (4) Sumy kontrolne dokumentów lub pakietów — ponownie opublikuj z SHA-256 obok lub zamiast SHA-1. (5) Repozytoria Git — włącz tryb SHA-256 dla nowych repozytoriów, jeśli łańcuch narzędzi to obsługuje. Starsze sumy kontrolne zarchiwizowanych pobrań mogą pozostać bez zmian, ponieważ wystarczą tylko do wykrywania przypadkowego uszkodzenia.
Czym był atak SHAttered?
SHAttered (shattered.io, luty 2017) to praktyczna kolizja SHA-1 wyprodukowana przez Google Security i CWI Amsterdam. Atak kosztował około 110 GPU-lat obliczeń (~110 000 USD po cenach chmury z 2017 roku) i wyprodukował dwa różne pliki PDF dające ten sam hash SHA-1: 38762cf7f55934b34d179ae6a4c80cadccbb7f0a. Obalił to założenie, że kolizje SHA-1 były tylko teoretyczne. Atak działa, wykorzystując ścieżkę różnicową w funkcji kompresji SHA-1. Do 2020 roku koszt kolizji SHA-1 z wybranym prefiksem spadł do ~45 000 USD. Dla porównania — w przypadku SHA-256 nigdy nie znaleziono żadnej kolizji.
Czy kolizje SHA-1 mogą zdarzyć się przypadkowo?
Przypadkowe natknięcie się na kolizję SHA-1 bez celowego wysiłku jest nadal astronomicznie mało prawdopodobne — istnieje 2^160 możliwych wartości SHA-1, więc prawdopodobieństwo przypadkowej kolizji wynosi około 1 na 10^24 dla dowolnych dwóch danych wejściowych. Niebezpieczeństwo jest wrogie: zdeterminowany atakujący może teraz spreparować kolizję za około 45 000 USD. Przypadkowe uszkodzenie historii Git nie jest realistycznym zagrożeniem wynikającym ze słabości SHA-1. Prawdziwe ryzyko leży w cyfrowo podpisanych dokumentach, certyfikatach i przepływach podpisywania kodu, gdzie atakujący mógłby podstawić złośliwy dokument o tym samym hashu co zaufany.
Czy SHA-1 nadaje się do zastosowań niezwiązanych z bezpieczeństwem, jak sumy kontrolne?
Do wykrywania przypadkowego uszkodzenia danych — przekłamanego pobrania, odwróconego bitu na dysku — SHA-1 jest technicznie nadal odpowiedni, ponieważ przypadkowe kolizje są praktycznie niemożliwe. Jednak dziś nie ma powodu, aby używać SHA-1 nawet do sum kontrolnych niezwiązanych z bezpieczeństwem, ponieważ SHA-256 jest tylko nieznacznie wolniejszy (akceleracja sprzętowa we wszystkich nowoczesnych procesorach), powszechnie obsługiwany i przyszłościowy. Jedynym uzasadnionym powodem używania SHA-1 jest teraz interoperacyjność ze starszym systemem, który akceptuje tylko 40-znakowe odciski hex.
Jak długi jest hash SHA-1?
Hash SHA-1 ma zawsze dokładnie 160 bitów, reprezentowanych jako 40 znaków szesnastkowych (2 znaki hex na bajt × 20 bajtów). Długość wyjścia jest stała niezależnie od rozmiaru wejścia — zahashowanie jednego znaku lub pliku o rozmiarze 10 GB daje dokładnie 40 znaków hex. Dla porównania: MD5 produkuje 32 znaki hex (128 bitów), SHA-256 produkuje 64 znaki hex (256 bitów), a SHA-512 produkuje 128 znaków hex (512 bitów). Krótsze wyjście w porównaniu z SHA-256 jest jednym z powodów, dla których odporność SHA-1 na kolizje jest słabsza — mniej możliwych wartości oznacza, że kolizje są statystycznie łatwiejsze do znalezienia.
Czy moje dane wejściowe są wysyłane na jakiś serwer?
Nie. SHA-1 jest obliczany całkowicie w przeglądarce za pomocą Web Crypto API (crypto.subtle.digest('SHA-1', data)). Otwórz Narzędzia deweloperskie → zakładka Sieć podczas hashowania — zobaczysz zero wychodzących żądań. Pliki upuszczone w trybie Plik są odczytywane przez FileReader API i hashowane lokalnie; bajty nigdy nie opuszczają maszyny. Sprawia to, że narzędzie jest bezpieczne do hashowania poufnych dokumentów, starszych certyfikatów lub odcisków własnościowego kodu źródłowego. Ta sama gwarancja prywatności dotyczy generatora SHA-256.
Dlaczego moje wyjście SHA-1 różni się od sha1sum w wierszu polecenia?
Prawie zawsze chodzi o końcowy znak nowej linii. Polecenie powłoki echo 'hello' | sha1sum zawiera znak nowej linii (\n) po "hello", więc hashuje "hello\n", a nie "hello". Użyj echo -n 'hello' | sha1sum lub printf '%s' 'hello' | sha1sum, aby go usunąć. Inne częste przyczyny: końce wierszy Windows (\r\n vs \n), BOM UTF-8 na początku pliku lub różnice w kodowaniu (UTF-8 vs Latin-1). Narzędzie koduje dane wejściowe jako UTF-8 bez BOM przed hashowaniem.

Powiązane narzędzia

Zobacz wszystkie narzędzia →