Mam 2 dokumenty programu Excel i chcę sprawdzić, czy są dokładnie takie same, oprócz nazwy pliku.
Na przykład pliki są nazywane fileone.xls
i filetwo.xls
. Oprócz nazw plików zakłada się, że ich zawartość jest identyczna, ale to chcę sprawdzić.
Szukałem sposobów na sprawdzenie tego i bez instalowania wielu wtyczek. Nie ma prostej drogi.
Próbowałem wygenerować skróty MD5 dla obu plików. Kiedy skróty są identyczne, czy to oznacza, że zawartość pliku jest taka sama 1: 1?
cmp
systemem Unix lubfc
(porównanie plików) w systemie Windows.diff -s file1 file2
jeśli mówi, że są identyczne, są identyczne (faktycznie porównuje pliki bajt po bajcie, więc wykluczone są nawet kolizje mieszające). sumy kontrolne są używane, gdy masz tylko jeden skrót i element, który uważa się za identyczny z autorem tego skrótu.Odpowiedzi:
Wszystkie pliki są zbiorem bajtów (wartości 0–255). Jeśli dwa pliki skrótów MD5 są zgodne, oba zbiory bajtów są bardzo prawdopodobne dokładnie takie same (ta sama kolejność, te same wartości).
Istnieje bardzo mała szansa, że dwa pliki mogą wygenerować ten sam MD5, czyli 128-bitowy skrót. Prawdopodobieństwo to:
Skróty mają działać w „tylko jednym kierunku” - tzn. Bierzesz zbiór bajtów i dostajesz skrót, ale nie możesz wziąć skrótu i odzyskać zbiór bajtów.
Kryptografia zależy od tego (w ten sposób można porównać dwie rzeczy bez wiedzy, co to są.)
Około roku 2005 odkryto metody
pobierania skrótu MD5 i tworzenia danych pasujących do tego skrótu, abyutworzyć dwa dokumenty, które miały ten sam skrót MD5 ( atak kolizyjny ). Zobacz komentarz @ user2357112 poniżej. Oznacza to, że osoba atakująca może utworzyć na przykład dwa pliki wykonywalne, które mają ten sam MD5, a jeśli zależysz od MD5 w celu ustalenia, któremu zaufać, zostaniesz oszukany.Dlatego MD5 nie powinien być używany do kryptografii lub bezpieczeństwa. Na przykład źle jest opublikować MD5 na stronie pobierania, aby zapewnić integralność pobierania. W zależności od skrótu MD5 nie wygenerowałeś się, aby sprawdzić, czy zawartość pliku lub danych jest tym, czego chcesz uniknąć.
Jeśli wygenerujesz własny, wiesz, że nie jesteś wobec siebie złośliwy (mam nadzieję). Tak więc do użytku jest w porządku, ale jeśli chcesz, aby ktoś inny mógł go odtworzyć i chcesz publicznie opublikować skrót MD5, należy użyć lepszego skrótu.
Należy pamiętać, że dwa pliki Excel mogą zawierać te same wartości w tych samych wierszach i kolumnach, ale bajt pliku może być zupełnie inny z powodu różnych formatów, stylów, ustawień itp.
Jeśli chcesz porównać dane w pliku, najpierw wyeksportuj je do pliku CSV z tymi samymi wierszami i kolumnami, aby usunąć całe formatowanie, a następnie haszować lub porównać pliki CSV.
źródło
diff
lub podobnego narzędzia, aby faktycznie potwierdzić, że pliki są bajt po bajcie identyczne, a nie tylko mieć ten sam skrót.diff -s
aby sprawdzić, czy CSV są identyczne. W rzeczywistości możeszdiff -s
nawet pliki Excela: jeślidiff
mówi, że są identyczne, nie musisz przechodzić do porównania CSV.W praktyce tak, identyczny skrót kryptograficzny oznacza, że pliki są takie same, o ile pliki nie zostały spreparowane przez osobę atakującą lub inną złośliwą jednostkę. Szanse na przypadkowe kolizje z dowolną dobrze zaprojektowaną funkcją skrótu kryptograficznego są tak małe, że są nieistotne w praktyce i przy braku aktywnego atakującego.
Ogólnie jednak nie, nie możemy powiedzieć, że dwa dowolne pliki posiadające ten sam skrót zdecydowanie oznaczają, że są one identyczne.
Sposób działania funkcji skrótu kryptograficznego polega na pobieraniu danych wejściowych o dowolnej długości i wyprowadzaniu wartości wejściowej o stałej długości obliczonej na podstawie danych wejściowych. Niektóre funkcje skrótu mają wiele długości wyjściowych do wyboru, ale dane wyjściowe nadal są w pewnym stopniu wartością o stałej długości. Wartość ta może wynosić do kilkudziesięciu bajtów; Algorytmy mieszające o najdłuższej obecnie powszechnie używanej wartości wyjściowej mają 512-bitową moc wyjściową, a 512-bitowa moc wyjściowa to 64 bajty.
Jeśli wejście funkcji skrótu jest dłuższe niż wyjście funkcji skrótu, należy usunąć pewną wierność, aby dopasować dane wejściowe do wyniku. W związku z tym musi istnieć wiele danych wejściowych o długości większej niż długość danych wyjściowych, które generują takie same dane wyjściowe.
Weźmy jako przykład obecny koń pociągowy, SHA-256. Wysyła skrót 256 bitów lub 32 bajty. Jeśli masz dwa pliki o długości dokładnie 32 bajtów, ale różne, powinny one (zakładając brak błędów w algorytmie) mieszać różne wartości, bez względu na zawartość plików; pod względem matematycznym skrót jest funkcją odwzorowującą 2 256 przestrzeni wejściowej na 2 256 przestrzeni wyjściowej, co powinno być możliwe bez kolizji. Jednakże, jeśli masz dwa pliki, które są długo każde 33 bajtów, musi istnieć jakiś kombinacji wejść, które dają ten sam 32-bajtowy wartość hash wyjście dla obu plików, ponieważ jesteśmy teraz odwzorowanie 2 264 miejsca wejścia na o 2 256przestrzeń wyjściowa; tutaj możemy łatwo zauważyć, że średnio powinno być 2 8 wejść dla każdego wyjścia. Przejdźmy dalej, a przy plikach 64-bajtowych powinno być 2 256 wejść dla każdego wyjścia!
Kryptograficzne funkcje skrótu są tak zaprojektowane, że obliczeniowo trudno jest skomponować dane wejściowe, które dają określone dane wyjściowe, lub skomponować dwa dane wejściowe, które dają takie same dane wyjściowe. Jest to znane jako preimage resistance odporność lub ataku kolizja oporu . Nie jest niemożliwe znalezienie takich kolizji; po prostu ma być naprawdę, bardzo, bardzo, bardzo trudny. (Trochę szczególnym przypadkiem ataku kolizyjnego jest atak urodzinowy ).
Niektóre algorytmy są lepsze od innych w przeciwstawianiu się atakującym. MD5 jest obecnie ogólnie uważany za całkowicie zepsuty, ale ostatnio spojrzałem, nadal miał całkiem niezłą odporność na pierwszy obraz . SHA-1 jest podobnie skutecznie łamany; ataki preimage zostały wykazane, ale wymagają określonych warunków, choć nie ma powodu, aby sądzić, że tak będzie w nieskończoność; jak mówi przysłowie, ataki zawsze się poprawiają, nigdy się nie pogarszają. SHA-256/384/512 są obecnie nadal uważane za bezpieczne dla większości celów. Jeśli jednak chcesz tylko sprawdzić, czy dwa nie-złośliwie spreparowane, prawidłowepliki są takie same, to każdy z nich powinien być wystarczający, ponieważ przestrzeń wejściowa jest już wystarczająco ograniczona, aby najbardziej interesowały Cię losowe kolizje. Jeśli masz powód, by sądzić, że pliki zostały spreparowane złośliwie, musisz przynajmniej użyć kryptograficznej funkcji skrótu, która jest obecnie uważana za bezpieczną, co stawia dolny pasek na SHA-256.
Pierwszym przykładem jest znalezienie danych wejściowych, które dają określoną wartość skrótu wyjściowego; drugim obrazem jest znalezienie jednego wejścia, które daje takie samo wyjście, jak inne, określone wejście; kolizja polega na znalezieniu dwóch danych wejściowych, które dają takie same dane wyjściowe, bez względu na to, co to jest, a czasami bez względu na to, jakie są dane wejściowe.
To powiedziawszy, ważne jest, aby pamiętać, że pliki mogą mieć bardzo różne reprezentacje danych i nadal wyświetlać dokładnie to samo. Mogą więc wydawać się takie same, mimo że ich skróty kryptograficzne się nie zgadzają, ale jeśli skróty się zgadzają, bardzo prawdopodobne jest, że będą takie same.
źródło
To gra prawdopodobieństwa ... skróty mogą reprezentować skończoną liczbę wartości.
Jeśli weźmiemy pod uwagę hipotetyczny (i bardzo słaby) 8-bitowy algorytm mieszający, wówczas może to reprezentować 256 różnych wartości. Gdy zaczniesz uruchamiać pliki za pomocą algorytmu, zaczniesz wyrzucać skróty ... ale wkrótce zaczniesz widzieć „ kolizje skrótów ”. Oznacza to, że do algorytmu zostały wprowadzone dwa różne pliki, które wygenerowały tę samą wartość skrótu co wynik. Oczywiście tutaj skrót nie jest wystarczająco silny i nie możemy twierdzić, że „ pliki z dopasowanymi skrótami mają tę samą zawartość ”.
Zwiększenie rozmiaru skrótu i użycie silniejszych algorytmów szyfrowania kryptograficznego może znacznie pomóc w ograniczeniu kolizji i zwiększyć naszą pewność, że dwa pliki z tym samym skrótem mają tę samą zawartość.
To powiedziawszy, nigdy nie możemy osiągnąć 100% pewności - nigdy nie możemy twierdzić , że dwa pliki z tym samym hashem naprawdę mają tę samą zawartość.
W większości / wielu sytuacjach jest to w porządku, a porównywanie skrótów jest „ wystarczająco dobre ”, ale zależy to od modelu zagrożenia.
Ostatecznie, jeśli musisz podnieść poziomy pewności, zalecam wykonanie następujących czynności:
Jeśli musisz być w 100% pewien, to na pewno zacznij od skrótu, ale jeśli skróty pasują, kontynuuj porównanie bajtów po bajcie dwóch plików.
Ponadto, jak zauważyli inni ... złożoność dokumentów tworzonych przez aplikacje takie jak Word i Excel oznacza, że tekst, liczby i widoczny układ mogą być takie same, ale dane przechowywane w pliku mogą być inne.
Excel jest w tym szczególnie zły - po prostu otwierając arkusz kalkulacyjny zapisując go ( nic nie robiąc ), możesz utworzyć nowy plik o innej zawartości.
źródło
Jeśli dwa pliki mają ten sam skrót MD5 i oba nie zostały specjalnie spreparowane, to są one identyczne. Jak trudno jest tworzyć pliki z tym samym hashem MD5, zależy od formatu pliku, nie wiem, jak łatwo jest z plikami Excel.
Więc jeśli masz własne pliki, które po prostu leżą i chcą znaleźć duplikaty, MD5 jest bezpieczny. Jeśli napisałeś jeden z plików, a drugi plik ma podejrzane pochodzenie, MD5 jest nadal bezpieczny (jedynym sposobem na uzyskanie różnych plików z tą samą sumą kontrolną MD5 jest utworzenie obu plików). Jeśli ktoś, komu nie ufasz, prześle Ci propozycję budżetu, a później wyśle inny plik, który, jak twierdzą, jest taki sam, MD5 może nie wystarczyć.
Aby uniknąć ryzyka, użyj SHA-256 lub SHA-512 zamiast MD5. Jeśli dwa pliki mają taki sam skrót SHA-256, to są one identyczne. To samo dotyczy SHA-512. (Istnieje teoretyczna możliwość, że mogą być różne, ale prawdopodobieństwo tego przypadkowego zdarzenia jest o wiele mniejsze niż prawdopodobieństwo, że Twój komputer trochę się przewróci podczas weryfikacji, niż to po prostu nie ma znaczenia. Jeśli chodzi o kogoś, kto celowo tworzy dwa pliki za pomocą ten sam skrót, nikt nie wie, jak to zrobić dla SHA-256 lub SHA-512).
Jeśli dwa pliki Excel mają różne skróty, to są różne, ale nie ma sposobu, aby dowiedzieć się, jak bardzo się różnią. Mogą mieć identyczne dane, ale różne formatowanie, mogą po prostu różnić się właściwościami lub mogą zostać zapisane w różnych wersjach. W rzeczywistości, jeśli Excel przypomina Worda, to samo zapisanie pliku aktualizuje jego metadane. Jeśli chcesz tylko porównać dane liczbowe i tekstowe oraz zignorować formatowanie i właściwości, możesz wyeksportować arkusze kalkulacyjne do pliku CSV, aby je porównać.
Jeśli masz dostępne narzędzia Unix / Linux, możesz użyć
cmp
do porównania dwóch plików. Aby porównać dwa pliki na tym samym komputerze, sumy kontrolne tylko komplikują sprawę.źródło
n
przedmioty są wkładane dom
pojemnikówn > m
, to co najmniej jeden pojemnik musi zawierać więcej niż jeden przedmiot”. Jeśli utworzysz więcej niż 2 ^ 64 wiadomości, będziesz mieć kolizje bez żadnego „specjalnego tworzenia”. I możesz mieć tylko 2 lataKrótka odpowiedź: kryptograficzną hash ma pomóc Ci być rozsądnie pewni, że pliki z pasującymi mieszań są takie same. O ile nie zostały celowo spreparowane, szanse na dwa nieznacznie różne pliki o podobnych wartościach skrótu są absurdalnie małe. Ale jeśli chodzi o porównywanie i weryfikację plików, które mogłyby być celowo modyfikowane, MD5 jest złym wyborem. (Użyj innej funkcji skrótu, takiej jak SHA3 lub BLAKE2.)
Długa odpowiedź: idealna funkcja skrótu to taka, która tworzy prawie unikalny skrót kryptograficzny dla każdego unikalnego elementu danych. Innymi słowy, zdecydowanie wiemy, że w tym wszechświecie istnieją dwa pliki, których wartości mieszające się kolidują, szansa na naturalne połączenie tych dwóch plików jest absurdalnie mała.
Dziesięć lat temu zdecydowałem, że muszę trzymać się jak najdalej od MD5. (Oczywiście, aż do wczoraj pamiętałem zły powód, dla którego to robię; dziesięć lat to dużo czasu, rozumiesz. Ponownie odwiedziłem moje poprzednie notatki, aby zapamiętać dlaczego i zredagowałem tę odpowiedź.) Widzicie, w 1996 roku znaleziono MD5 być podatnym na ataki zderzeniowe. 9 lat później badacze byli w stanie stworzyć pary dokumentów PostScript i (ouch!) Certyfikatów X.509 z tym samym hasłem! MD5 był wyraźnie zepsuty. (Megaupload.com używało również MD5, a wokół kolizji haszujących było wiele cholernie chudych, co sprawiało mi wtedy problemy).
Doszedłem więc do wniosku, że chociaż MD5 był (i nadal jest) niezawodny w porównywaniu łagodnych plików, należy go całkowicie zaprzestać. Uznałem, że poleganie na nim może przerodzić się w pobłażanie i fałszywe zaufanie: gdy zaczniesz porównywać pliki za pomocą ich skrótów MD5, pewnego dnia zapomnisz o drobnym zabezpieczeniu i porównasz dwa pliki, które są celowo stworzone, aby mieć ten sam skrót. Ponadto mało prawdopodobne jest, aby procesory i procesory kryptograficzne dodawały obsługę tego systemu.
Oryginalny plakat ma jednak jeszcze mniej powodów, aby używać MD5, ponieważ:
źródło
Z praktycznego punktu widzenia bezpośrednie porównywanie plików w celu ustalenia, czy są one inne, będzie szybsze niż obliczenie skrótu dla każdego pliku, a następnie porównanie tego skrótu.
Aby obliczyć skróty, musisz przeczytać całą zawartość obu plików.
Aby ustalić, czy są one identyczne poprzez bezpośrednie porównanie, wystarczy przeczytać zawartość obu plików, dopóki się nie zgadzają. Gdy znajdziesz różnicę, wiesz, że pliki nie są identyczne i nie musisz czytać więcej danych z żadnego z plików.
Zanim to zrobisz, możesz po prostu porównać rozmiary dwóch plików. jeśli rozmiary się różnią, zawartość nie może być taka sama.
źródło
Skróty takie jak MD5 lub SHA mają ustaloną długość, powiedzmy, że to 300 znaków alfanumerycznych (w rzeczywistości są one krótsze i nie używają całego zestawu znaków alfanumerycznych).
Powiedzmy, że pliki składają się ze znaków alfanumerycznych i mają rozmiar do 2 GB.
Możesz łatwo zobaczyć, że istnieje znacznie więcej plików (o rozmiarze do 2 GB) niż możliwe wartości skrótu. Zasada szuflady mówi, że niektóre (różne) pliki muszą mieć te same wartości skrótu.
Ponadto, jak pokazano na shattered.io 1 , możesz mieć dwa różne pliki: shattered.io/static/shattered-1.pdf i shattered.io/static/shattered-2.pdf, które mają tę samą wartość skrótu SHA-1, będąc jednocześnie zupełnie inny.
1 SHA1 jest „silniejszym” algorytmem mieszającym niż md5
źródło
NIE. Różne wartości gwarantują, że pliki są różne. Te same wartości nie gwarantują, że pliki są takie same. Stosunkowo łatwo jest znaleźć przykłady przy użyciu CRC16.
W równowadze prawdopodobieństwa ze współczesnymi schematami mieszania są one takie same.
źródło
Twoje pytanie jest jednak odwrócone - załóżmy, że skrót oznacza, że mają te same dane (co nie jest w 100% gwarantowane, ale wystarcza na całe życie porównywania plików co sekundę, aby nie dojść do kolizji). Nie musi to oznaczać, że posiadanie tych samych danych oznacza, że będą mieli ten sam skrót. Więc nie - nie można porównywać danych w pliku programu Excel z danymi w innym pliku programu Excel, mieszając plik, ponieważ istnieje wiele sposobów, w jakie dwa pliki mogą się różnić bez różnic między danymi bazowymi. Jeden oczywisty sposób - dane są przechowywane w formacie XML, każda komórka ma własny węzeł XML. Jeśli te węzły są przechowywane w różnych porządkach, dane są takie same, ale plik jest inny.
źródło
Aby dodać pozostałe odpowiedzi, oto wiele przykładów par plików z tym samym skrótem MD5 i inną zawartością.
źródło
Odpowiedź na ten PO została podana, ale może skorzystać z podsumowania.
Jeśli chcesz sprawdzić, czy dwa pliki są takie same, wiele zależy od tego, czy pliki i skróty są pod twoją kontrolą.
Jeśli generujesz skróty samodzielnie z plików i jesteś prawie pewien, że nikt inny nie miał okazji / umiejętności / motywacji, aby celowo dojść do niewłaściwego wniosku, to prawie każdy skrót - nawet „znane zepsute” skróty, takie jak MD5 i SHA1, są prawie na pewno wystarczy. Ale to znaczy, że możesz generować pliki z dużą prędkością przez miliony lat i nadal nie jest prawdopodobne, aby skończyły się jakiekolwiek dwa pliki, które są faktycznie różne, ale mają ten sam skrót. Jest prawie na pewno bezpieczny.
Jest to scenariusz, w którym chcesz szybko sprawdzić, czy dwa katalogi na komputerze lub serwerze plików mają tę samą zawartość, czy jakieś pliki w katalogu są dokładnie duplikatami itp., I masz pewność, że pliki nie mają został zaprojektowany / nielegalnie zmodyfikowany i ufasz, że Twoja aplikacja / narzędzie haszujące da prawidłowe wyniki.
Jeśli znajdujesz się w scenariuszu, w którym jeden z plików - lub wstępnie obliczony skrót - mógł zostać zmanipulowany lub zmodyfikowany w celu oszukiwania cię w niewłaściwym wniosku, potrzebujesz silniejszego (nieprzerwanego) skrótu i / lub innego zabezpieczenia. Na przykład, jeśli pobierzesz plik i sprawdzisz, czy jest poprawny, sprawdzając skrót, wówczas osoba atakująca może być w stanie skonstruować zły plik z poprawnym skrótem lub zaatakować witrynę internetową, aby umieścić nieprawidłowy skrót, gdy szukasz „właściwego” " (wartość oczekiwana. Sprowadza się to do szerszych problemów bezpieczeństwa.
źródło
W wierszu polecenia systemu Windows można użyć
comp
narzędzia do ustalenia, czy dwa pliki są dokładnie takie same. Na przykład:źródło
Nie. Jeśli hashe są różne, to nie znaczy, że zawartość są różne. Jednakowe kody skrótu nie oznaczają jednakowej zawartości. Hashcode to redukcja dużej domeny do mniejszego zakresu, z definicji: implikacja jest taka, że hascodes nad nierównymi treściami mogą być równe. W przeciwnym razie ich obliczenie nie miałoby sensu.
źródło
Ta odpowiedź ma być poręczną mapą scenariuszy, które mogą się zdarzyć lub nie, oraz uzasadnienia, które możesz zastosować. Zobacz inne odpowiedzi, aby dowiedzieć się, dlaczego funkcje skrótu działają w ten sposób.
Po wybraniu funkcji skrótu i trzymaniu się jej, należy rozważyć wszystkie te kombinacje:
Scenariusz, w którym identyczne pliki generują różne wartości skrótu, jest jedynym, który jest absolutnie niemożliwy.
Dwa rozumowania, które zawsze obowiązują:
Dwa argumenty, które nie są ścisłe :
źródło
Dla twoich celów tak, identyczne skróty oznaczają identyczne pliki.
Jak wyjaśniają inne odpowiedzi, możliwe jest zbudowanie 2 różnych plików, które skutkują tym samym hashem, a MD5 nie jest szczególnie solidny pod tym względem.
Użyj więc silniejszego algorytmu mieszającego, jeśli planujesz porównać dużą liczbę dokumentów programu Excel lub jeśli uważasz, że ktoś może chcieć manipulować porównaniem. SHA1 jest lepszy niż MD5. SHA256 jest znowu lepszy i powinien dać ci całkowitą pewność co do konkretnego zastosowania.
źródło
Pliki są prawdopodobnie identyczne, jeśli ich skróty są identyczne. Możesz zwiększyć zaufanie, modyfikując oba pliki w identyczny sposób (np. Umieszczając tę samą wartość w tej samej nieużywanej komórce), a następnie porównując skróty zmodyfikowanych plików. Trudno jest stworzyć celową kolizję dla pliku, który jest zmieniany w sposób nieznany wcześniej.
źródło
Spójrzmy na to w praktyczny sposób. Zamiast powiedzieć „skróty są identyczne” powiem „napisałem program komputerowy, który oblicza skróty dwóch plików i drukuje, czy są one takie same, czy nie”, i uruchamiam program z dwoma plikami, i mówi: "identyczny". Istnieje kilka powodów, dla których może to zrobić:
Pliki mogą być identyczne. Mój kod może zawierać błędy (jednym, który faktycznie zdarzył się w praktyce, było porównywanie dwóch długich (256-bajtowych) skrótów nie z memcmp, ale z strcmp: Porównanie zwróci „to samo”, jeśli pierwszy bajt w każdym skrócie jest równy zero, a szansa na to jest 1 na 65536. Może występować błąd sprzętowy (promień kosmiczny uderza w komórkę pamięci i przełącza ją) lub może wystąpić rzadki przypadek dwóch różnych plików z identycznym hashem (kolizja skrótu).
Powiedziałbym, że w przypadku nieidentycznych plików zdecydowanie najbardziej prawdopodobną przyczyną jest błąd programisty, potem pojawia się promień kosmiczny, który zmienił zmienną boolowską w wyniku porównania skrótów z „fałszywych” na „prawdziwe”, a znacznie później przychodzi przypadek zderzenia mieszającego.
Istnieją korporacyjne systemy tworzenia kopii zapasowych, które unikają tworzenia kopii zapasowych identycznych plików od 10.000 użytkowników, mieszając każdy plik i sprawdzając, czy plik o identycznym haszu jest już przechowywany na serwerze. Dlatego w przypadku kolizji plik nie zostanie utworzony, co może prowadzić do utraty danych. Ktoś obliczył, że znacznie bardziej prawdopodobne jest, że meteoryt uderzy w twój serwer i zniszczy wszystkie kopie zapasowe niż utratę pliku, ponieważ jego suma kontrolna pasuje do innego pliku.
źródło