Przejdź do treści
HNarzędzia
pl
Kategorie

Dla programistów

Jak sprawdzić, czy pobrany plik nie został zmieniony (suma kontrolna SHA-256)

Strona pobierania podaje skrót SHA-256, a Ty chcesz wiedzieć, czy plik na dysku to ten sam plik. Policz skrót lokalnie, porównaj go ze wzorcem i sprawdź, co zgodność mówi, a czego nie.

Skrót pliku (suma kontrolna, ang. checksum) to ciąg znaków policzony z całej zawartości pliku. SHA-256 daje zawsze 256 bitów, czyli 64 znaki szesnastkowe, niezależnie od tego, czy plik ma 1 KB, czy kilka GB. Ten sam plik zawsze daje ten sam skrót, a zmiana jednego bitu daje zupełnie inny wynik. Jeśli skrót policzony u Ciebie zgadza się z opublikowanym przez wydawcę, plik na dysku ma te same bajty, co plik, z którego go policzono.

Co potwierdza zgodność skrótów

Zgodność potwierdza integralność: pobranie nie zostało przerwane, plik nie jest ucięty ani uszkodzony i nikt go po drodze nie zmienił, o ile skrót wzorcowy pochodzi z miejsca, którego ta zmiana nie dotyczy. Pochodzenia pliku sama zgodność nie dowodzi. Jeśli skrót stoi na tej samej stronie i na tym samym serwerze co plik, osoba, która podmieniła plik, mogła podmienić też skrót.

Skrót ma więc większą wartość, gdy:

  • plik pobierasz z serwera lustrzanego (mirrora), a skrót czytasz ze strony głównej wydawcy,
  • skrót leży w pliku z sumami, który wydawca podpisał cyfrowo, i podpis też sprawdzisz.

Przy zwykłej kontroli „czy pobranie się udało” wystarczy skrót ze strony pobierania.

Gdzie wydawcy publikują sumy

Najczęściej obok linku do pobrania: jako tekst na stronie, jako plik .sha256 albo SHA256SUMS z listą wielu plików, albo w opisie wydania. Przykład z dokumentacji Get-FileHash: strona wydania PowerShella podaje skrót SHA256 każdego pakietu. Weź skrót dokładnie tej wersji i tej architektury (x64, ARM) co pobrany plik.

Sprawdzenie w przeglądarce

  1. Otwórz Generator hash i w polu „Źródło danych” wybierz „Plik”. Przeciągnij pobrany plik. Plik nie jest wysyłany na serwer.
  2. Narzędzie liczy jednocześnie MD5, SHA-1, SHA-256, SHA-384 i SHA-512.
  3. W polu „Porównaj z oczekiwanym skrótem” wklej skrót od wydawcy. Pasujący wiersz podświetla się na zielono, a pod polem pojawia się „Zgodność: skrót pasuje do algorytmu SHA-256”. Nie musisz wiedzieć, którego algorytmu użył wydawca.

Generator hash z plikiem testowym installer-test.bin: skrót SHA-256 pasuje do wklejonego, wiersz jest podświetlony na zielono

Jak narzędzie porównuje skróty

Narzędzie uznaje skrót za zgodny, gdy wklejony tekst zawiera pełny skrót w hex (wielkość liter i spacje nie mają znaczenia) albo w Base64. Możesz wkleić skrót razem z tym, co zwykle mu towarzyszy:

Wklejony tekst Wynik
sam skrót, małymi lub WIELKIMI literami, także podzielony spacjami zgodność
zapis Base64 zgodność
cały wiersz z sha256sum: skrót, spacje i nazwa pliku zgodność
wiersz w formacie BSD: SHA256 (plik) = skrót zgodność
skrót z prefiksem sha256: zgodność
bajty rozdzielone dwukropkami (c6:1e:19:...) zgodność
pierwsze 16 znaków skrótu brak zgodności
pełny skrót z jednym zmienionym znakiem brak zgodności

Fragment skrótu nigdy nie wystarczy. Nie porównuj na oko tylko początku i końca: pełne porównanie to jedno wklejenie.

MD5, SHA-1 czy SHA-256

Algorytm wybiera wydawca, a Ty porównujesz z tym, który podał. Różnią się odpornością na celowe oszustwo:

  • MD5 (32 znaki hex). RFC 6151 z marca 2011 stwierdza, że MD5 nie jest już akceptowalny tam, gdzie potrzebna jest odporność na kolizje, np. w podpisach cyfrowych. Kolizja to dwa różne pliki o tym samym skrócie, przygotowane razem przez atakującego.
  • SHA-1 (40 znaków). Pierwszą kolizję SHA-1 pokazali 23 lutego 2017 badacze z CWI Amsterdam i Google (shattered.io): dwa różne pliki PDF z identycznym SHA-1. NIST ogłosił 15 grudnia 2022, że SHA-1 powinien zostać wycofany do 31 grudnia 2030 na rzecz SHA-2 i SHA-3.
  • SHA-256 (64 znaki) należy do rodziny SHA-2 i jest dziś zwykłym wyborem wydawców.

Do wykrycia uszkodzonego pobrania wszystkie trzy wystarczą. Gdy wydawca podaje tylko MD5 lub SHA-1, sprawdź go, ale zgodność traktuj jako test uszkodzenia pliku, nie dowód pochodzenia. Gdy podaje kilka skrótów, porównaj SHA-256 (lub dłuższy).

Sprawdzenie poleceniem systemowym

Wynik z polecenia możesz wkleić do tego samego pola porównania, także razem z nazwą pliku. Składnia z dokumentacji producentów (sprawdzona w październiku 2026):

System Polecenie
Windows, PowerShell Get-FileHash .\plik.iso -Algorithm SHA256 (SHA256 to wartość domyślna, Microsoft)
Windows, wiersz poleceń certutil -hashfile plik.iso SHA256 (składnia: certutil [options] -hashfile InFile [HashAlgorithm], algorytmy: MD2, MD4, MD5, SHA1, SHA256, SHA384, SHA512, Microsoft)
macOS shasum -a 256 plik.iso (bez -a polecenie liczy SHA-1, według man shasum)
Linux sha256sum plik.iso (GNU coreutils)

Jeśli wydawca dał plik .sha256 w formacie „skrót, dwie spacje, nazwa pliku”, sha256sum -c plik.sha256 na Linuksie lub shasum -a 256 -c plik.sha256 w macOS porównają za Ciebie i wypiszą OK albo FAILED. Pobrany plik i plik z sumami muszą leżeć w tym samym katalogu, a nazwa w pliku sum musi się zgadzać z nazwą pliku na dysku.

Przykład: jeden zmieniony bit

Plik testowy installer-test.bin to 5 242 880 bajtów (5 MiB) pseudolosowych danych. Narzędzie pokazuje jego wagę jako „5 MB”, bo liczy w jednostkach po 1024 bajty. Drugi plik, installer-test-changed.bin, to kopia z jednym odwróconym bitem (bajt o indeksie 1 000 000). Oba pliki mają tę samą wagę.

Plik SHA-256 w narzędziu
installer-test.bin c61e1954d6819386d3bdf0f3262c972865ffcdd32e0a59995c826ffd14ad57bd
installer-test-changed.bin 6b79f7773e991686de44900ef7560de571bc8986330b4c1cf31ae46f4c490baa

Różni się 59 z 64 znaków, choć pliki różnią się jednym bitem z ponad 41 milionów. Ten sam wynik daje polecenie shasum -a 256. Skróty MD5 obu plików też są zupełnie różne: e2fb435fa067690c804d1a488adf2858 i 0f583f6df74fca730b90a87119d66891.

Gdy do pola porównania wkleimy skrót pierwszego pliku (jako wzorcowy), a w narzędziu wczytamy drugi plik, dostajemy „Brak zgodności z żadnym z obliczonych skrótów”. Tak wygląda podmieniony lub uszkodzony plik.

Generator hash z plikiem installer-test-changed.bin: wklejony skrót pierwszego pliku, komunikat o braku zgodności na czerwono

W terminalu ten sam test wygląda tak (shasum na macOS, w którym plik sum zawierał skrót oryginału pod nazwą zmienionego pliku):

installer-test.bin: OK
installer-test-changed.bin: FAILED
shasum: WARNING: 1 computed checksum did NOT match

Ograniczenia narzędzia

  • Plik jest wczytywany w całości do pamięci przeglądarki, a przy MD5 powstaje jeszcze jedna kopia w pamięci. Górną granicę ustala urządzenie, nie narzędzie. Plik 200 MiB policzył się w naszym teście w około 4 sekundy (Chrome na komputerze z macOS; na Twoim sprzęcie może być inaczej). Większych plików nie próbowaliśmy. Dla obrazów kilkugigabajtowych użyj polecenia systemowego.
  • SHA-1, SHA-256, SHA-384 i SHA-512 liczy mechanizm wbudowany w przeglądarkę. MD5 liczy własna implementacja zgodna z RFC 1321, bo przeglądarki go nie udostępniają. Na naszym pliku testowym wynik zgadza się z wynikiem innego programu.
  • Przeglądarka liczy skróty tylko na stronie otwartej przez HTTPS. Bez niego narzędzie zgłasza błąd.
  • Narzędzie porównuje tylko cały skrót (patrz tabela wyżej) i nie sprawdza podpisów cyfrowych.

Skróty nie pasują. Co sprawdzić

  1. Czy wkleiłeś pełny skrót, a nie jego fragment.
  2. Czy algorytm się zgadza: SHA-256 ma 64 znaki hex (44 w Base64), SHA-1 40, MD5 32.
  3. Czy skrót dotyczy tego pliku: wersji, systemu, architektury, formatu (np. .iso zamiast .zip).
  4. Czy skrót liczysz z pobranego pliku, a nie z rozpakowanej zawartości. Wydawcy zwykle podają skrót archiwum.
  5. Pobierz plik jeszcze raz, najlepiej bez pośredników (VPN, proxy, menedżer pobierania). Przerwane lub przepisane pobranie kończy się innym skrótem.

Jeśli drugie pobranie z tego samego źródła też się nie zgadza, nie uruchamiaj pliku i zgłoś to wydawcy.