Pytanie o sprawdzanie integralności danych, czyli co jest lepsze i dokładniejsze - opcja "Porównaj wg zawartości..." w Total Commander czy SHA-3 512 w PS Hash?

Witam. Mam następujące pytanie. Chodzi mi o porównanie dwóch lub więcej plików, które w teorii są wszystkie oczywiście identyczne/tożsame/takie same jeśli chodzi o ich zawartość/dane pod względem tego czy rzeczywiście są one takie identyczne/tożsame/takie same. Przykładowo - mam plik obrazu .iso o rozmiarze równo 4 GB na dysku wewnętrznym i drugi teoretycznie taki sam plik obrazu .iso o rozmiarze także równo 4 GB na pendrive. Pytanie, jeśli chcę się upewnić, że te dwa pliki są rzeczywiście tożsame/identyczne/takie same pod względem zawartości/danych (zarówno plik z dysku wewnętrznego jak i ten z pendrive’a) to co jest lepsze/dokładniejsze/bardziej precyzyjne pod tym względem ? Opcja „Porównaj wg zawartości…” w Total Commander czy np. porównanie jednego pliku z drugim za pomocą algorytmu SHA-3 512 w PS Hash ?

Teraz tak - domyślam się, że żeby mieć 100-procentową pewność, że takie dwa pliki są rzeczywiście identyczne/tożsame/takie same pod względem ich zawartości/danych to należy każdego z nich sprawdzić bit po bicie, czy dobrze myślę ? Czyli, jeśli przyjąć umownie, że te dwa pliki mają rozmiar po równo 4 GB każdy z nich to - 4 GB x 1024 MB = 4096 MB x 1024 KB = 4 194 304 KB x 1024 B = 4 294 967 296 B x 8 bitów = 34 359 738 368 bitów. A zatem należy w każdym z tych dwóch plików sprawdzić po kolei każdy z tych 34 359 738 368 bitów pod względem tego czy są one rzeczywiście identyczne/tożsame/takie same. Domyślam się, że każdy taki bit przyjmuje wartość 0 lub 1, ponieważ mamy do czynienia z systemem binarnym/dwójkowym, czy dalej dobrze główkuję ? Więc jeśli się okaże, że każdy z tych 34 359 738 368 bitów ma identyczne/tożsame/takie same wartości w tych dwóch plikach to znaczy, że te dwa pliki są rzeczywiście identyczne/tożsame/takie same pod względem zawartości/danych, czy tak to jest ?

Teraz przechodząc do porównania między opcją „Porównaj wg zawartości…” w Total Commander i porównaniem jednego pliku z drugim za pomocą algorytmu SHA-3 512 w PS Hash - czy któraś z tych opcji sprawdza te pliki właśnie bit po bicie tak żeby mieć 100-procentową pewność, że te dwa pliki są rzeczywiście identyczne/tożsame/takie same pod względem zawartości/danych ? Pytam o to, bo chciałbym na przyszłość wiedzieć co jest lepsze/dokładniejsze/bardziej precyzyjne do takich zadań ? Jak rozumiem wynik takiego porównania dwóch plików bit po bicie gdzie jest sprawdzany/analizowany/porównywany każdy bit w każdym z tych dwóch plików to ciąg zer i jedynek, czy tak ?

Jeśli zarówno opcja „Porównaj wg zawartości…” w Total Commander jak i porównanie jednego pliku z drugim za pomocą algorytmu SHA-3 512 w PS Hash jednak nie sprawdza takich dwóch plików bit po bicie gdzie jest sprawdzany/analizowany/porównywany każdy bit w każdym z tych dwóch plików to czy istnieje jakieś inne oprogramowanie które potrafi robić takie rzeczy ? Jeśli tak to proszę o nazwy takich programów.

Za wszelkie wskazówki i pomoc z góry dziękuję.

W TC utwórz sobie sumę kontrolną dla każdego z plików, (np MD5) a potem te sumy kontrolne ze sobą porównaj :slight_smile:

Untitled-1

Własnie po to są sumy kontrolne, żeby zagwarantować że zawartość jest identyczna. Używa się ich powszechnie, zwłaszcza w przypadku gdy masz tylko jeden plik a jego twórca publikuje sumę kontroną, żebys mógł się upewnić, że masz ten właściwy plik.

Jest jednak niewielka, minimalna szansa, że dwa trochę inne pliki, będą miały taką samą sumę kontrolną. Jeżeli masz dwa pliki i chcesz porówać bajt po bajcie, to użyj narzędzia fc dostępnego w każdym Windowsie z wiersza poleceń cmd.exe

fc /b file1.bin file2.bin

Wtedy SHA3 powinno rozwiązać ten problem na tysiące lat.

@Bradlee Wielkie Dzięki za pomoc z tą komendą fc w wierszu poleceń (cmd.exe). Rozumiem, że ta komenda nie zmieni przez przypadek zawartości/danych porównywanych plików ? Tu tylko chciałbym się upewnić, poza tym to wszystko.

@januszek Także Tobie dziękuję za pomoc.

@krystian3w Co miałeś na myśli pisząc „Wtedy SHA3 powinno rozwiązać ten problem na tysiące lat.” ? To, że dwa porównywane pliki za pomocą tego algorytmu, z których każdy ma inną zawartość/dane (nawet jak będzie przykładowo tylko jeden bit w jednym miejscu się różnił w obydwu tych plikach) nigdy nie dadzą wyniku w postaci identycznej/tożsamej/takie samej sumy kontrolnej ? To tylko tu chciałbym żebyś mi odpowiedział na te pytania. Poza tym to wszystko. Także Tobie dzięki za zaangażowanie.

tylko porównuje, nic nie zmienia, możesz być spokojny. Dokumentacja z przykładami fc | Microsoft Learn

@Bradlee W porządku. Dzięki jeszcze raz za pomoc. To wszystko.

Jak odpisze mi @krystian3w i będzie wszystko jasne to myślę, że temat to zamknięcia.

WinMerge:

Wybierasz pierwsze ISO, w drugim polu - drugie, i klikasz "Porównaj.

@blumberplumber Dzięki, już zainstalowałem ten program, tzn. WinMerge. Mam tylko jedno pytanie - ten Winmerge porównuje te pliki na zasadzie wyliczania jakichś sum kontrolnych tych porównywanych plików jak np. SHA512, MD5, itp. czy też sprawdza/analizuje/testuje/porównuje zawartość/dane tych plików bit po bicie ? Pytam, bo obok przycisku „Porównaj” zauważyłem jeszcze strzałkę w dół, a jak się na nią kliknie to pokazują się jeszcze opcje takie jak „Tekst”, „Tabela”, „Binarny”, „Obraz”, „Strona internetowa”, „Apache Tika” oraz „Wszystkie” na które jak się najedzie kursorem myszki to wyskakuje jeszcze masa innych opcji których już nie będę tu wymieniał, bo jest ich bardzo dużo, a poza tym dzielą się one na jeszcze inne pomniejsze opcje więc może spytam bardziej ogólnie - do czego są te inne opcje ? Wiem, jest tego od groma i pewnie musiałbyś mi zrobić wykład na ten temat, ale może dałbyś radę to w miarę możliwości streścić do najważniejszych kwestii ?

Porównanie binarne najczęściej stosowane pokazuje, że coś się różni ale jest mało czytelne lub po prostu sieczka.
Opcje dodatkowe pozwalają na zobaczenie realnie jeśli są to pliki zrozumiałe w sensie tekstu, kodu itp.

Ładnie pokazane to jest na stronie programu i to po polsku:

@doomfan Wiesz co, czy on używa sum kontrolnych, to ja nie wiem… Ja go używam do porównywania dwóch folderów, kopii, zapisanych w dwóch miejscach (dysk HDD w komputerze i dysk USB Adata 2 TB, czy te foldery są takie same… Na tym dysku USB mam kopię darmowych chmur, dzięki czemu pliki mam zapisane w komputerze, dysku USB i niektóre pliki też w smartfonie.

Moim zdaniem WinMerge się do tego nie nadaje. Używam go często, ale jest to program do wynajdywania różnic w plikach a nie sprawdzaniu integralności.

Tak samo nadaje się jak 500 podobnych programików napisanych za ostatnie 30 lat.
Ale masz rację, można szybciej i prościej niż instalować kombajn do banalnego zadania :wink:

Czyli do tego, do czego ja używam się nie nadaje? :o:

Wg mnie nie. Tak na szybko to dam Ci przykład, że np. jest bezradny w przypadku zaszyfrowanych danych, a porównując sumę kontrolną masz praktycznie 100% pewności, że pliki są identyczne.

@Wredzia No rzeczywiście, jak się zastosuje porównanie binarne plików to jest to mało czytelne lub po prostu sieczka - masz rację. Oczywiście zakładam, że masz na myśli porównanie binarne plików w WinMerge, a nie w ogóle ?

Bo np. porównanie binarne plików wykonuje też chyba komenda fc /b file1 file2 w wierszu poleceń (cmd.exe) oraz opcja „Porównaj wg zawartości…” w Total Commander, dobrze myślę ?

Jak próbowałem porównywać pliki za pomocą komendy fc /b file1 file2 w wierszu poleceń (cmd.exe) to wydaje mi się, że aż takiej sieczki nie było i wyglądało to w miarę czytelnie, bo po zakończeniu porównania plików wyświetlało chyba tylko te miejsca w danych binarnych porównywanych plików gdzie występują różnice między porównywanymi plikami, a nie wszystkie dane binarne porównywanych plików w ogóle, włącznie oczywiście z różnicami w tych danych. W ogóle chyba ta komenda fc /b file1 file2 w wierszu poleceń (cmd.exe) z samego założenia wyświetla właśnie tylko te miejsca w danych binarnych porównywanych plików gdzie występują różnice między porównywanymi plikami, a całej reszty, czyli pozostałego zapisu binarnego porównywanych plików który się pokrywa w porównywanych plikach chyba nie, czy mam rację ? Z kolei jak ta komenda fc /b file1 file2 w wierszu poleceń (cmd.exe) w ogóle nie znajdzie żadnych różnic w danych binarnych porównywanych plików to wówczas w ogóle żadne dane binarne porównywanych plików nie są wyświetlanie po zakończeniu porównywania plików, a pojawia się tylko komunikat, że pliki są identyczne.

W Total Commander z kolei opcja „Porównaj wg zawartości…” działa tak, że jak zostaną znalezione jakieś różnice w danych binarnych porównywanych plików to program wyświetla wprawdzie chyba cały zapis binarny porównywanych plików, ale jednocześnie te miejsca w danych binarnych porównywanych plików gdzie występują różnice między porównywanymi plikami są zapisane czerwoną czcionką, a cała reszta, czyli pozostały zapis binarny porównywanych plików który się pokrywa w porównywanych plikach jest domyślnie zapisany normalnie czarną czcionką. Z tym, że tu chyba znowu UWAGA ! Total Commander wprawdzie porównuje pliki porównując ich dane binarne, ale jeśli zostaną znalezione jakieś różnice w danych binarnych porównywanych plików to program wyświetla cały zapis binarny porównywanych plików gdzie tak jak wspomniałem wcześniej - czerwoną czcionką są zapisane te miejsca w danych binarnych porównywanych plików gdzie występują różnice między porównywanymi plikami, a cała reszta, czyli pozostały zapis binarny porównywanych plików który się pokrywa w porównywanych plikach jest domyślnie zapisany normalnie czarną czcionką. ALE - to co program wyświetla, czyli te niby dane binarne porównywanych plików są zapisane w systemie hexadecymalnym/szesnastkowym a nie binarnym/dwójkowym ! Innymi słowy program porównuje pliki porównując ich dane binarne które z samego założenia powinny być zapisane domyślnie/normalnie w systemie binarnym/dwójkowym, a zatem stanowić ciąg zer i jedynek, ale wynik końcowy jest konwertowany w programie z tego domyślnego/normalnego zapisu binarnego/dwójkowego na system hexadecymalny/szesnastkowy, zapewne po to by znacząco skrócić długość potencjalnego horrendalnie długiego zapisu danych binarnych porównywanych plików w domyślnym/normalnym systemie binarnym/dwójkowym. W końcu łatwiej zapisać długi kod danych mając do dyspozycji 16 znaków aniżeli tylko 2 znaki, dobrze kombinuję ? Z kolei jeśli Total Commander w ogóle nie znajdzie żadnych różnic w danych binarnych porównywanych plików to wtedy w ogóle żadne dane binarne porównywanych plików, oczywiście uprzednio przekonwertowane z domyślnego/normalnego zapisu dwójkowego/binarnego na system hexadecymalny/szesnastkowy nie są wyświetlanie po zakończeniu porównywania plików, a pojawia się tylko komunikat, że pliki są identyczne, czyli tak samo jak w przypadku użycia komendy fc /b file1 file 2 w wierszu poleceń (cmd.exe).

@blumberplumber W porządku, rozumiem. W sumie to mnie też chodzi o to samo co Tobie, tzn. dwie kopie danych zapisanych w dwóch różnych miejscach - jedna na wewnętrznym dysku SSD Crucial MX500 4TB tylko na dane w laptopie oraz druga na zewnętrznym dysku SSD Crucial X8 4TB tylko na dane. W ogóle to myślę jeszcze o dwóch dodatkowych kopiach danych zapisanych w kolejnych dwóch różnych miejscach - jedna na drugim wewnętrznym dysku SSD Crucial MX500 4TB tylko na dane w pececie oraz druga na drugim zewnętrznym dysku SSD Crucial X8 4TB tylko na dane. Innymi słowy miałbym wtedy cztery kopie zapisanych danych w czterech różnych miejscach - zawsze jest wówczas większa szansa, że na czymś te dane jednak przetrwają całe i zdrowe, nawet jak któryś dysk/dyski nagle mi nawalą.

Nie wiem czy to najlepszy zestaw do robienia kopii zapasowych, tzn. dwa wewnętrzne dyski SSD Crucial MX500 4TB i dwa zewnętrzne dyski SSD Crucial X8 4TB, a Wy jak sądzicie ? To dobre dyski czy lepiej byłoby zmienić na coś innego, np. coś od Samsunga z takich modeli jak np. 870 EVO, 860 EVO, 860 PRO, T5, T5 EVO, T7, T7 Shield lub T9 lub coś od SanDisk jak np. Ultra 3D, Extreme Portable i Desk Drive ? A może coś od WD, jak np. Red, Blue lub Green albo od Kingstona jak np. SEDC600M, DC600M, DC500ME, XS1000, XS1000R, XS2000 i SXS2000 ? No może jeszcze Patriot, jak np. P210 i P220 ? ADATA, PNY, Verbatim, Goodram i Silicon Power nie są chyba najbardziej godne zaufania jeśli chodzi o ich awaryjność i bezpieczeństwo danych, prawda ? Nie wiem jak Kioxia, OCZ, Emtec, Corsair, Hynix, SK Hynix, Transcend, Seagate, Phison, Lexar, Gigabyte, MSI, ASUS, Acer, Biostar, Intel, Dell, Apple, Lenovo, Netac, Sony, Philips, OWC, Kodak, HP, Fanxiang, itd. - jak u nich jest z awaryjnością i bezpieczeństwem danych, może ktoś się orientuję tutaj ?

@sensu A czym się różni wynajdywanie różnic w plikach od sprawdzania integralności danych ? To nie to samo ?

Tak wiem - duża ściana tekstu, ale tak jakoś wyszło.

Przy sprawdzeniu integralności możesz użyć pliku sumy kontrolnej, nie musisz porównywać plików.
http://code.kliu.org/hashcheck/screenshots/HashVerify1_Classic.png"

Nie mylmy tu pewnych pojęć.
Na początek trzeba zadać pytanie. W jakim celu sprawdzamy plik ?

Tu w skrócie kiedy co i dlaczego:

Cel Metoda
Szybka weryfikacja identyczności (np. pobrany plik vs. oryginał) Suma kontrolna (np. sha256sum, md5sum)
Znalezienie różnic w zawartości (np. różne wersje kodu) Porównanie plików (np. diff, fc, narzędzia jak WinMerge/Meld)
Bezpieczeństwo (wykrywanie zmian w ważnych plikach) Silna suma kontrolna (SHA-256, SHA-3)
Duże pliki (ISO, kopie zapasowe) Suma kontrolna (szybsza i wydajniejsza)

Młotkologia :stuck_out_tongue:

Jak nie zależy nam na wiedzy co się zmieniło to suma kontrolna, jak chcemy widzieć co i ważne rozumiemy co robimy to porównanie plików.

Czasem kliknięcie 2x na wygenerowanie sumy kontrolnej i jej sprawdzenie jest wolniejsze i mniej poręczne niż zaznaczenie 2 plików w jakimś menadżerze plików i porównanie.

Tu padnie pytanie, czy suma kontrolna jest 100% bezpieczna ?
NIE.

  • Słabe algorytmy (np. CRC32, MD5, SHA-1) są podatne na kolizje
  • Celowe podmienienie pliku wraz z sumą (np. gdy atakujący zmienia zarówno plik, jak i załączoną do niego checksum w pliku README).
  • Błędy implementacyjne (np. gdy program oblicza sumę tylko fragmentu pliku zamiast całości)

Jeśli chodzi o zwykłą weryfikację plików , SHA-256 jest wystarczający . Ale w przypadku wrażliwych danych (np. firmware, oprogramowanie bankowe) lepiej użyć podpisu kryptograficznego .

@sensu W porządku, dzięki.

@Wredzia Powiedziałeś, że jeśli chodzi o zwykłą weryfikację plików to SHA-256 jest wystarczający, ale w przypadku wrażliwych danych typu firmware, oprogramowanie bankowe, itp. już nie i lepiej użyć podpisu kryptograficznego - no dobrze, a jak zamiast SHA-256 użyję przykładowo SHA-512 lub jeszcze nowszego SHA-3 512 to wtedy co ? Będzie to wówczas w 100 procentach bezpieczne ?

Dla Ciebie w domu bez znaczenia czy 256 czy 512.
Im wyższa cyferka tym większe obciążenie obliczeniowe, przy tysiącach plików zaczyna się cyrk i trzeba wspomagać sprzętowo.
Wystarczy 5 sekund różnicy na każdym pliku aby postawić dęba domowego peceta takiego za 10k.

Z ciekawości zrobiłem sobie test. 1057 plików, 14.6Gb.
SHA-256 - 37 sekund. Bo optymalizowany pod 32 bit.
SHA-512 - 31 sekund
SHA3-512 - 2 min 17 sekund. Masakra :stuck_out_tongue:

Test wykonany menadżerem plików Double Commander (coś jak Total Commander).