» Poradna » Ostatní

MD5 - Jak opakovaně dopočítat různý poslední blok bez předchozího počítání předchozích?

avatar
 | Microsoft Windows 8 Firefox 17.0

MD5 - Jak opakovaně dopočítat různý poslední blok bez předchozího počítání předchozích?Mám 256 souborů o velikosti 1 GB. Tyto soubory se liší jen v posledním bajtu. Potřebuju u všech zjistit hash MD5 a to co nejrychleji. Potřebuju tedy zjistit jak provést výpočet pro všechny bloky kromě posledního, pak uložit pozici a u každého souboru dopočítávat jen ten poslední blok. Netuším jak uložit pozici a načítat ji pro každý soubor, aby se od té pozice pokračovalo. Nevyzná se v tom někdo? Nenavedl by mě? Myslím tím třeba přes CryptHashData atd. a Advapi32.dll, popř. přes cokoliv jinýho. Popř. nevěděl by někdo o nějakém polopatickém návodě, jak se vytváří MD5 i s příkladem, aby se to dalo pochopit, z definice RFC 1321 jsem to nějak nepochopil celé, se zdrojů, co jsem našel na netu, taky ne. Nebo nevysvětlil by mi někdo postup co je na http://en.wikipedia.org/wiki/MD5Díky

Mohlo by vás také zajímat

Odpovědi na otázku

 | Microsoft Windows 7 IE 9.0

Což třeba "nedopočítávat" ale "vypočítat"?http://www.stahuj.centrum.cz/utility_a_ostatni/ostatni... Jak dlouho to trvá nevím, myslím, že tady víš víc než já.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 7 IE 9.0

Teď jsem si ten SW "prubnul" na nějakých 660 MB, a jakkoliv nešlo o astronomické časové hodnoty (kolem 19 sec. na externím drive), je mi jasné, proč chceš dopočítavat. Na druhou stranu, než nalezneš, tak ... . Je to jasné, ne?

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
 | Microsoft Windows 8 Firefox 17.0

Chci udělat downloader na warserver.cz, který bude stahovat přes premium bez strhávání kreditu.K tomu potřebuju zjistit poslední bajt souboru. To se dá několika způsoby, dopočítat ho přes dopočet hashe pro všechny možné bajty je nejelegantnější (další možností je dostahovat poslední bajt přes free (ale je tam 30 s/ soubor), udělat databázi posledních bajtů, info u souboru atd.). Jak funguje algoritmus už vím, tedy nějaké vzorové zdrojáky jsem našel, bohužel když jsem použil algoritmy, které nepoužívají systémové knihovny (např. v autoitu funkce na md5 od SvenP), tak je to brutálně pomalé, a u těch, co využívají systémovou knihovnu, tak zas nevím jak přijít na to, jak se udělá kopie aby se to mohlo dopočítávat (např. v autoitu funkce na md5 od Warda, ta používá user32.dll/CallWindowProc).Nejsem žádnej programátor, navíc v těch věcech, jako DllCall vyloženě plavu.Možná by mi pomohlo, kdyby mi někdo vysvětlil u toď toho:http://hovinko.php5.cz/MD5.au3Vytvoří se DllCall, pak se do něj hrnou data, průběžně se to počítá a pak se vyjede výsledek ... mě by zajímalo, jak udělat prostě kopii toho průběžného stavu a ten pak 256x použít znovu Jako to co je v _MD5Init, pak hodněkrát to co je v _MD5Input, pak udělat (nevím jak) kopie stavu ... a toto 256x: poslední _MD5Input a _MD5Result

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 7 Firefox 16.0

Zkusím ti naznačit něco, co bude vypadat jako legrace, ale není tomu tak. Blahé paměti, když jsem se v drive hrabal mnohem a mnohem důkladněji než teď, jsem měl vlastní SW pracující na úrovni přerušení. Nalézt libovolný (tedy i poslední) sektor s daty toho kterého file byla opravdu rychlostní smršť. A nalezení jeho jibovolného byte také. Ovšem svého času (kde ty loňské ...). Šikovný programátor, pracující v assemblerech ti tohle zmákne stejně rychle, jako mě (když už jsem byl línej) SW, který srovnával data čtená z CD se skutečnými po vypálení (samozřejmě, že se jednalo o "syrové" čtení, které se od sežvejkaného po zásahu OS velmi často dramaticky lišilo - použití pro "dolování" dat z média (čtení bez kontrol CRC a mnohá jiná zvěrstva) a mne už nebavilo používat debugger apod. pro ladění vlastního SW. Pokud by byl zájem, mohu posloužit kontaktem na podobné odborníky, sám už v tom moc nedělám - jinými slovy žiju z podstaty. Tak se to říká ne?

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
 | Microsoft Windows 8 Firefox 17.0

Ježiš, to je triviální, načíst jakokoliv část souboru přímo (třeba poslední bajt). A to myslím jak z disku, tak i z webu. To zvládnu, ale o to mi teď nejde.Já potřebuju to co jsem už popsal.A nějak jsem ani nepochopil, o čem píšeš Já potřebuju zjistit poslední B souboru, když ho nevím, ale vím MD5, páč ji má warserver v api: http://warserver.cz/api/Potřebuju tedy zjistit to s tím dopočítáváním MD5, komplet pro všechny by trvalo řádově v minutách a to by pak bylo daleko lepší použít dostahováníé toho souboru přes free, ale to už zas odbočuju od podstaty věci a ta je to dopočítávání MD5.

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
 | Microsoft Windows 8 Firefox 17.0

Jo a poslední B nevím proto, protože na warserveru jde stahovat bez strhávání kreditu přes premium všechny bajty souboru kromě posledního, soubor se započítá jako stažení a strhne kredit za celý soubor jen v případě stáhnutí posledního bajtu, takže ten stahovat nechci.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows XP Firefox 17.0

Takže, pokud to chápu správně:- máš soubor bez posledního bajtu- máš md5 toho souboru, kde ten chybějící bajt je.Přece nepotřebuješ nic dopočítavat! Bajt má 256 kombinací, takže pojedeš smyčku, ve které postupně budeš inkrementovat ten bajt, přilepíš ho k tomu souboru a sjedeš md5. Pak porovnáš, jestli souhlasí tím, co máš. A pojedeš tak dlouho, až to vyjde, minimálně jednou, maximálně 256x, průměrně 128x.Při dnešním výkonu počítačů to není problém.Jestli je systém tak primitivně nastaven, tak takovou utilitu někdo brzy udělá a systém změní princip. Stačí to rozšířit na více bajtů a dramaticky zpomalíš vyhledání správné koncové kombinace

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
 | Microsoft Windows 8 Firefox 17.0

Ano, o to, co popisuješ, se právě snažím. Pokud se to upraví na více bajtů, tak ani tak to nebude vadit, v tom případě bude pak shodnější dostahování souboru přes free.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Linux Mozilla 1.9.1.7

Budeš si muset napsat vlastní implementaci MD5. V ní budeš mít dvě speciality:1) Podpora pro postupné dopočítávání dalších bloků. Tak jsou všechny implementace interně napsané, ty to jen potřebuješ dostat ven, aby to volající program mohl použít. Dá se předpokládat, že tohle už spousta implementací "má v sobě" i s tím publikováním. Například DCPCrypt to umí.2) Podpora pro uložení a obnovení vnitřního stavu MD5. To jsem si dost jistý, že si budeš muset napsat sám. Je to trivialita, mělo by ti stačit uložit 128 bitů někam do paměti a později zase načíst zpět, ale normální implementace to nepublikují, protože pro to nemají důvod.Postup pak bude triviální: Postupně načítat hash ze všech bloků kromě posledního. Uložit stav. Smyčka: Zkusit poslední blok a porovnat hash. Pokud sedí, konec. Pokud nesedí, obnovit stav a zkusit další poslední blok.Mezi námi, pokud si to nedokážeš napsat sám za odpoledne, tak to považuji za dost idiotský způsob, jak ušetřit pár korun. Ale kdo chce kam...

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
 | Microsoft Windows 8 Firefox 17.0

Já ušetřit pár korun nechci, jednak nevyužiju naplno ani free stahování a jednak moc nestahuju. Já to beru jako něco, co mě baví, aspoň vím pár nových věcí ohledně md5.Co se týče napsaného kodu, který si všechno počítá sám, tak to jsem našel ten od SvenP http://www.autoitscript.com/forum/topic/10590-calcula... Tam bych měl všechno pod kontrolou, jenže jsem zkoušel tento kod (nic jinýho jsem podobného vhodnějšího zatím nenašel) a je to šíleně, hodně šíleně pomalé, vhodné tak akorát na textové řetězce ne na velké soubory.V tod tom by to myslím bylo jednoduchý, prostě by se uložil stav těch čtyř proměnných a,b,c,d z předposledního bloku a ty by se pak použili na ten poslední. Jenže zrovna toď ten kod je šíleně pomalej todle to by se tak akorád mohlo hodit na dopočítávání toho posledního bloku, pokud by z něčeho rychlého se dalo vycucnou ty čtyry proměnný z předposledního

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
 | Microsoft Windows 8 Firefox 17.0

Jinak kůknu na ten DCPCrypt, jak je to tam udělaný.

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: MD5, Definice, Poslední blok, Počítání, Blok