Kontrolní součty pomocí MD5 a SHA1

Pro začátek si vypůjčím definici kontrolního součtu z Wikipedie:

Kontrolní součet je doplňková informace, která se předává spolu s vlastní informací a slouží k ověření, zda je vlastní informace úplná a zda při jejím přenosu nedošlo k chybě. Kontrolní součet je výsledkem nějaké předem určené operace, provedené s vlastní informací. Příjemce informace má možnost sám kdykoliv spočítat svůj vlastní kontrolní součet. Jakmile vypočtený kontrolní součet nesouhlasí s předaným kontrolním součtem, znamená to, že během přenosu došlo k poškození zprávy nebo k poškození kontrolního součtu.

Z definice také vyplývá použití – když si chcete rychle ověřit jestli dva soubory jsou stejné. To se hodí nejenom pro kontrolu, jestli nebyl soubor poškozen při přenosu, ale také když si chcete ověřit jestli dva stejně vypadající soubory na disku jsou opravdu ty samé nebo jestli vaše váš soubor je opravdu ten, za nějž se vydává. Existuje několik metod pro tvorbu těchto součtů. Na Internetu se nejčastěji setkáte s MD5 a SHA1. Když pomocí nich vytvořím kontrolní součty textu výše citované definice, budou vypadat takto:

SHA1: eb683281c095bb86659d1dc684b4053e8495fa3b
MD5:  f2a26fefbbeafade26ce10875c8d3fa9

Jak vidíte, jde o celkem krátké textové údaje. Podobně by vypadaly i kdybych vytvořil kontrolní součet daleko většího objemu dat. Tak například kontrolní součty pro ISO obraz linuxové distribuce Lubuntu 13.10 (696 MB) vypadají následovně:

SHA1: 10a2cd7e9a037a81248e0a777b7ed7da42525e11
MD5:  5e85e368b6eaf1b9f5cf88467c6570f5

Určitě už někoho z vás napadlo, že informace uložená v kontrolním součtu neobsahuje tolik dat, aby popsala celý soubor, pro který je součet spočítán. Je to pravda a proto se taky může stát, že různé soubory mohou mít stejné kontrolní součty. ALE není to problém. Algoritmy jsou navrženy tak, aby při velmi podobných vstupních datech byly výstupy velmi rozdílné a naopak. Takže pokud budou mít dva soubory stejné součty, budou na první pohled úplně jiné (např. malý textový soubor a obrovský archiv). Navíc soubory se stejným MD5 nebudou mít stejný SHA1 (nebo alespoň pravděpodobnost takové kolize je velmi blízká nule). Na druhou stranu, pokud vezmu v předchozím případě použitou definici z Wikipedie, a první výskyt písmene l nahradím 1 (tohoto si u některých fontů vůbec nevšimnete), budou se kontrolní součty od původních výrazně lišit (nahoře je vždy původní verze, dole upravená):

SHA1: eb683281c095bb86659d1dc684b4053e8495fa3b
SHA1: 264abc4ebbe813e704a1e2b3717809fd0d188fda
MD5: f2a26fefbbeafade26ce10875c8d3fa9
MD5: 0daa880e05a112eb67fdb8d6b8e4e5d5

Jak vidíte, nepatrná změna na vstupních datech se opravdu projevila výraznou změnou kontrolního součtu. Ve světě Open Source je dobrým zvykem udávat kontrolní součty ke stažitelným souborům. Má to svoji logiku. Jelikož se jedná o díla volně šiřitelná, je možné si je obstarat z více zdrojů a pokud si soubor (typicky program) stáhnete odjinud než z autorova serveru, je dobré ověřit si, jestli je opravdu tím, za co se vydává. (Toto souvisí i s mým varováním ohledně (ne)stahování systémových souborů z neoficiálních zdrojů v článku Fallout 2 + High Resolution Patch pod Windows 8/8.1.)

Aktualizováno 30. 12. 2020
Jak takový hash získat, popisuje článek: Jak ve Windows zjistit (nejen) MD5 hash souboru bez dalších programů.

Programů pro výpočet kontrolních součtů existuje celá řada. Pod Windows se mi osvědčil Rapid CRC Unicode Portable.

Opět, budu rád, když v diskuzi doporučíte další nástroje i pro jiné systémy.

Synchronizace uložených pozic (savů) mezi počítači

tl;dr: Zkopírovat složku se savy do složky Dropboxu a v původním umístění vytvořit symlink. mklink /d [původní_umístění] [složka_na_DB]

Jestli používáte víc počítačů a zároveň hrajete hry, možná jste, stejně jako já, zatoužili po možnosti pokračovat ve hře na jiném stroji. Možná vám tuto službu nabízí Steam (nemám, neznám, můžete mě poučit v diskuzi), nebo jiný klient pro nakupování a správu her. Možná si vždy po dohrání nakopírujete složku s uloženými pozicemi na flashku a na druhém počítači je zase nakopírujete do hry. A možná vás to nebaví…

Mě to taky nebavilo + mám nepříjemnou vlastnost ukládat flashdisky tak, že čas vyhrazený na hraní jsem strávil jsem strávil jejich hledáním. Proto jako hlavní nástroj na přenos menších objemů (nikoliv citlivých) dat používám Dropbox. Proč tedy nepoužít pro přenos pozic právě ten? Jenže drtivá většina her neumožňuje jednoduše změnit umístění složky s pozicemi. A tady nastupují symbolikcé odkazy – Symlinky. Ve zkratce: Jde o vlastnost souborového systému (ve Windows NTFS) přistupovat k jednomu obsahu ze dvou různých míst. Takže můžete mít složku s uloženými pozicemi ve složce Dropboxu a zároveň v původním umístění a obě tyto složky budou obsahovat ten stejný obsah (který bude na disku jen jendou, takže nebude zabírat 2x více místa).

Dost terorie, jdeme si ukázat jak na to!

Windows Vista a vyšší už v základu obsahují nástroj na tvorbu symlinků. Je to program mklink a ovládá se z příkazové řádky. (Budete potřebovat administrátorká oprávnění). We Windows XP se mklink nenachází, ale já jsem s úspěchem používal Junction (díky, Ziki), který funguje obdobně.

Postup

  • Zálohujeme :)
  • Přesuneme složku (např.: c:\hra\savegame)  s pozicemi do složky Dropboxu (např.: c:\dropbox\hra)
  • Otevřeme příkazový řádek jako administrátor a zadáme: mklink /d „c:\hra\savegame“ „c:\dropbox\hra\savegame“ a potvrdíme enterem.
  • Ve složce, kde se dřív nacházela složka s pozicemi (c:\hra) se objeví nová složka se jménem savegame (na WinXP bude mít ikonu složky, na Win8 má ikonu zástupce složky), obsahující to samé, co složka na Dropboxu.

Image

Pár poznámek na závěr

Někoho určitě napadlo, že je zbytečné přesouvat složku savegame do složky Dropboxu, když by stačilo ve složce Dropboxu vytvořit odkaz na původní umístění savegame ve složce hry. Bohužel to nepůjde, protože Dropbox nesynchronizuje obsah složek, jež jsou pouze symlinky.

Program Junction má oproti mklinku prohozené pořadí složek junction [složka_na_DB] [původní_umístění]

Cesty je vhodné uzavírat do uvozovek, protože pokud by měla nějaká složka v názvu mezeru způsobilo by to, že by mklink vrátil hlášku o neplatném umístění.

Parametr /d značí, že bude vytvořen symlink na složku – v základním nastavení se vytváři symlinky na soubory (více).

Dropbox zálohuje data na něj nahraná, takže kdyby se vám náhodou stalo, že si savy omylem smažete/přepíšete, můžete si přes webové rozhraní obnovit starší verzi.

Nemusíte používat přímo Dropbox, stejný postup by měl fungovat pro všechna podobná úložiště. (Opět, budu rád, když se v diskuzi podělíte o zkušenosti.)

Demence v podání Microsoftu

Ne, nebudu se tu vysmívat tomu, že Windows vás při nefungujícím připojení odkážou na online nápovědu. Tomu se člověk i zasměje… Ale nezasměje se, když půl hodiny vytvářípomocí oficiálního programu od MS (Windows 7 USB/DVD Download tool) instalační USB flash disk s Windows a na konci mu to vyhodí chybu. Že prý soubory se podařilo nakopírovat, ale nepovedlo se vytvořit bootovací sektor. Pro více informací se máte podívat na stránku s nápovědou

ms-usb-kikotiTam se navzdory očekávání opravdu nachází řešení problému. Aby bylo možné vytvořit bootovací sektor, musíte mít nainstalované Microsoft Image Mastering API (na XP). To musí být hrozně těžké zkontrolovat na začátku tvorby bootovatelného flash disku, jestli jsou v systému přítomny potřebné komponenty. No což, stáhnete a nainstalujete Mastering API a spustíte tvorbu znovu – přeci jen, soubory byly nakopírovány úspěšně, tak teď stačí vytvořit ten bootovací sektor a můžete se pustit do opravy vedle stojícího počítače, kde už přes půl hodiny svítí obrazovka s výzvou pro vložení instalačního média. Chyba lávky, milákové, program vás upozorní, že před procesem je nutné naformátovat disk a to smaže všechny data. Celé kopírování si budete muset zopakovat.

Tak nevím, MS si vytyčil za cíl snížit podíl WInXP na nějakých 13%, ale s takovou mám největší chuť ty osmičky hodit do koše a na truc se vrátit k XP v kombinaci s nějakou distribucí Linuxu.

PS: Nakonec jsem zjistil, že pro obnovení systému není bootovací sektor třeba.

Aktualizace 13.12. 2013: Pokud stejně jako já nebudete slavit úspěch s oficiálním programem i přes splnění všech jeho požadavků, můžete použít alternativní Rufus.