Li ser rêbazek xerîb ji bo rizgarkirina cîhê dîskê

Bikarhênerek din dixwaze ku perçeyek nû ya daneyê li ser dîskê binivîsîne, lê cîhê wî têra belaş tune ku vê yekê bike. Ez jî naxwazim tiştek jêbikim, ji ber ku "her tişt pir girîng û pêwîst e." Û divê em bi wê re çi bikin?

Tu kes ev pirsgirêk nîne. Li ser dîskên me yên hişk a terabyte agahdarî hene, û ev hêjmar kêm nabe. Lê ew çiqas bêhempa ye? Di dawiyê de, hemî pelan tenê komek bit bi dirêjiyek diyar in û, bi îhtîmalek mezin, ya nû ji ya ku berê hatî hilanîn ne pir cûda ye.

Eşkere ye ku lêgerîna li perçeyên agahdariya ku berê li ser dîskek hişk hatine hilanîn, heke ne têkçûnek e, wê hingê bi kêmanî ne karek bi bandor e. Ji hêla din ve, heke cûdahî piçûk be, wê hingê hûn dikarin piçekî rast bikin ...

Li ser rêbazek xerîb ji bo rizgarkirina cîhê dîskê

TL;DR - Duyemîn hewildana axaftinê li ser rêbazek xerîb a xweşbînkirina daneyan bi karanîna pelên JPEG, naha bi rengek bêtir fêmkirî.

Li ser bit û cudahiyê

Ger hûn du daneya bi tevahî bêserûber bistînin, wê hingê bi navînî nîvê bit-ên ku ew dihewînin hevûdu dibin. Bi rastî, di nav sêwiranên mimkun ên ji bo her cotek ('00, 01, 10, 11'), tam nîvê heman nirxan e, her tişt li vir hêsan e.

Lê bê guman, heke em tenê du pelan bavêjin û yek bi ya duyemîn ve bikin, wê hingê em ê yek ji wan winda bikin. Ger em guhertinan xilas bikin, em ê bi tenê ji nû ve vekin şîfrekirina delta, ku bêyî me bi tevahî baş heye, her çend ew bi gelemperî ji bo heman armancan nayê bikar anîn. Em dikarin hewl bidin ku rêzek piçûktir di nav rêzek mezin de bihêlin, lê digel vê yekê em xetera windakirina beşên krîtîk ên daneyê dikin ger em wê bi her tiştî re bi nerazî bikar bînin.

Wê demê di navbera çi û çi de cûdahî dikare were rakirin? Welê, ango pelek nû ya ku ji hêla bikarhêner ve hatî nivîsandin tenê rêzek bit e, ku pê re em nikarin bi serê xwe tiştek bikin. Dûv re hûn tenê hewce ne ku li ser dîska hişk bitikên wusa bibînin ku ew dikarin bêyî ku cûdahiyê hilînin werin guheztin, da ku hûn ji windabûna wan bêyî encamên cidî bijîn. Û wateya ku meriv ne tenê pelê li ser FS bixwe, lê hin agahdariya kêmtir hesas di hundurê wê de biguhezîne. Lê kîjan û çawa?

Rêbazên guncan

Pelên pêçandî yên winda têne alîkariyê. Hemî van jpeg, mp3 û yên din, her çend bihevrebûna windayî be jî, komek bit hene ku dikarin bi ewlehî werin guheztin. Mimkun e ku meriv teknîkên pêşkeftî yên ku di qonaxên cûrbecûr yên şîfrekirinê de bi rengek nepenî pêkhateyên xwe diguhezîne bikar bînin. Payin. Teknîkên pêşkeftî... guheztinek nediyar... yek bitek nav yekî din... hema wisa ye steganography!

Bi rastî, vekirina yek agahdarî di nav yekî din de rêbazên wê yên wekî tiştek din tîne bîra xwe. Di heman demê de ez ji nedîtîbûna guhertinên ku di hestên mirovan de hatine çêkirin jî bandor dibim. Cihê ku rê ji hev vediqetin di nepenîtiyê de ye: peywira me bi bikarhêner tê ku agahdariya zêde li ser dîska xwe bike; ew ê tenê zirarê bide wî. Ew ê dîsa ji bîr bike.

Ji ber vê yekê, her çend em dikarin wan bikar bînin, divê em hin guhertinan bikin. Û dûv re ez ê ji wan re bi mînakek yek ji awayên heyî û formatek pelê ya hevpar re vebêjim û nîşan bidim.

Derbarê çakelan

Ger hûn bi rastî wê biqelînin, ew di cîhanê de tiştê herî bitewist e. Em, bê guman, li ser pelên JPEG dipeyivin. Ne tenê bi ton amûr û rêbazên heyî yên ji bo vegirtina daneyan di nav wê de hene, lê ew forma grafîkî ya herî populer a li ser vê gerstêrkê ye.

Li ser rêbazek xerîb ji bo rizgarkirina cîhê dîskê

Lêbelê, ji bo ku hûn nekevin cotkirina kûçikan, hûn hewce ne ku qada çalakiya xwe di pelên vê formatê de sînordar bikin. Tu kes ji çarçikên monokromî yên ku ji ber pêlêdana zêde xuya dibin hez nake, ji ber vê yekê hûn hewce ne ku xwe bi karkirina bi pelek jixwe vegirtî re sînordar bikin, ji nûve kodkirinê dûr dikevin. Zêdetir, bi hevrêzên yekjimar, yên ku piştî operasyonên ji windabûna daneyê berpirsiyar dimînin - DCT û quantîzasyon, ku di nexşeya kodkirinê de bi rengek bêkêmasî tê xuyang kirin (bi saya wiki Pirtûkxaneya Neteweyî ya Bauman):
Li ser rêbazek xerîb ji bo rizgarkirina cîhê dîskê

Ji bo xweşbînkirina pelên jpeg gelek rêbazên mimkun hene. Optimîzasyonek bê windahî heye (jpegtran), xweşbîniyek heye "winda tune", yên ku bi rastî tiştek din dikin, lê em bala wan nadin wan. Beriya her tiştî, heke bikarhêner amade ye ku agahiyek di nav yekî din de bihêle da ku cîhê dîska belaş zêde bike, wê hingê ew an demek berê berê wêneyên xwe xweşbîn kir, an jî ji tirsa windakirina kalîteyê qet naxwaze wiya bike.

F5

Tevahiya malbatek algorîtmayan bi van şertan re têkildar e, ku hûn dikarin xwe pê nas bikin di vê pêşkêşkirina baş. Ya herî pêşketî ji wan algorîtma ye F5 ji hêla Andreas Westfeld ve, bi hevrêzên pêkhateya ronahiyê re dixebite, ji ber ku çavê mirov ji guhertinên wê herî kêm hesas e. Digel vê yekê, ew teknolojiyek pêvekirinê li ser bingeha şîfrekirina matrixê bikar tîne, ku ev gengaz dike ku dema ku heman hejmarê agahdarî vedihewîne, hindiktir guheztinan çêbike, her ku mezinahiya konteynerê tê bikar anîn.

Guhertin bixwe di bin hin mercan de nirxa bêkêmasî ya hevberan bi yek kêm dike (ango, ne her gav), ku dihêle hûn F5 bikar bînin da ku hilanîna daneya li ser dîska xwe xweştir bikin. Mesele ev e ku hevahenga piştî guhertinek wusa bi îhtîmalek mezin dê piştî şîfrekirina Huffman ji ber belavkirina statîstîkî ya nirxan di JPEG de kêmtir bit dagir bike, û sifirên nû dema ku wan bi karanîna RLE şîfre bikin dê qezencek bidin.

Guhertinên pêwîst bi rakirina beşa berpirsiyarê nepenîtiyê (vesazkirina şîfreyê), ku çavkaniyan û dema darvekirinê xilas dike, û lê zêdekirina mekanîzmayek ji bo xebata bi gelek pelan re li şûna yek carî, vedihewîne. Xwendevan ne mimkûn e ku bi hûrgulî bi pêvajoya guhartinê re eleqedar bibe, ji ber vê yekê em werin ser danasîna pêkanînê.

Teknolojiya bilind

Ji bo ku ez nîşan bidim ka ev nêzîkatî çawa dixebite, min rêbaz di C-ya paqij de bicîh kir û hem di warê leza darvekirinê û hem jî ji hêla bîranînê ve gelek xweşbîn kirin (hûn nikarin xeyal bikin ka van wêneyan çiqas giraniya xwe bêyî berhevkirinê, tewra berî DCT-ê jî) pêk anî. Cross-platform bi karanîna berhevokek pirtûkxaneyan ve hatî bidestxistin libjpeg, pcre и tinydir, ji bo ku em spasiya wan dikin. Hemî ev ji hêla 'çêkirinê' ve têne berhev kirin, ji ber vê yekê bikarhênerên Windows-ê dixwazin ji bo nirxandinê hin Cygwin ji bo xwe saz bikin, an jî bixwe bi Visual Studio û pirtûkxaneyan re mijûl bibin.

Pêkanîn di forma karûbar û pirtûkxaneyek konsolê de heye. Kesên eleqedar dikarin di derheqê karanîna ya paşîn de di depoya li ser Github-ê de, zencîra ku ez ê di dawiya postê de pê ve girêbidim, di readme de bêtir fêr bibin.

Çawa bikar bînin?

Bi baldarî. Wêneyên ku ji bo pakkirinê têne bikar anîn bi lêgerîna bi karanîna birêkûpêkek birêkûpêk a di pelrêça root ya diyarkirî de têne hilbijartin. Piştî qedandinê, pelan dikarin li gorî dilê xwe di nav sînorên wê de werin barkirin, nav û kopî kirin, pel û pergalên xebitandinê biguherînin, hwd. Lêbelê, divê hûn pir baldar bin û naveroka yekser bi tu awayî neguherînin. Wendakirina nirxa yek bit jî dikare vegerandina agahiyê ne gengaz bike.

Piştî qedandinê, karûbar pelek arşîvek taybetî ya ku tê de hemî agahdariya ku ji bo pakkirinê hewce dike, tevî daneyên di derheqê wêneyên ku hatine bikar anîn de, dihêle. Bi xwe, ew bi qasî du kilobytes giran e û bandorek girîng li cîhê dîskê dagirkirî nake.

Hûn dikarin kapasîteya mumkin bi karanîna ala '-a' analîz bikin: './f5ar -a [peldanka lêgerînê] [Perl-lihevhatî îfadeya rêkûpêk]'. Pakkirin bi fermana './f5ar -p [peldanka lêgerînê] [Perl-lihevhatî îfadeya birêkûpêk] [pelê pakkirî] [navê arşîvê]' tê kirin, û bi './f5ar -u [pelê arşîvê] [navê pelê hatî vegerandin] pakkirin. ]'.

Xwepêşandana xebatê

Ji bo ku bandora rêbazê nîşan bide, min berhevokek ji 225 wêneyên bêkêmasî yên kûçikan ji karûbarê barkir. Unsplash û di belgeyan de pdfeke mezin a 45 metre ya cilda duyemîn dîtin Hunera Bernamekirinê Knuta.

Rêzkirin pir hêsan e:

$ du -sh knuth.pdf dogs/
44M knuth.pdf
633M dogs/

$ ./f5ar -p dogs/ .*jpg knuth.pdf dogs.f5ar
Reading compressing file... ok
Initializing the archive... ok
Analysing library capacity... done in 17.0s
Detected somewhat guaranteed capacity of 48439359 bytes
Detected possible capacity of upto 102618787 bytes
Compressing... done in 39.4s
Saving the archive... ok

$ ./f5ar -u dogs/dogs.f5ar knuth_unpacked.pdf
Initializing the archive... ok
Reading the archive file... ok
Filling the archive with files... done in 1.4s
Decompressing... done in 21.0s
Writing extracted data... ok

$ sha1sum knuth.pdf knuth_unpacked.pdf
5bd1f496d2e45e382f33959eae5ab15da12cd666 knuth.pdf
5bd1f496d2e45e382f33959eae5ab15da12cd666 knuth_unpacked.pdf

$ du -sh dogs/
551M dogs/

Screenshots ji bo temaşevanan

Li ser rêbazek xerîb ji bo rizgarkirina cîhê dîskê

Pelê nepakkirî dikare û divê hîn jî were xwendin:

Li ser rêbazek xerîb ji bo rizgarkirina cîhê dîskê

Wekî ku hûn dibînin, ji orîjînal 633 + 36 == 669 megabyte daneya li ser dîska hişk, em gihîştin 551-a xweştir. Cûdahiya wusa radîkal bi kêmbûna nirxên hevberan ve tê ravekirin, ku bandorê li wan dike. Dûv re kompresyona bê windahî: kêmkirina yek bi yek bi hêsanî dikare "du bayt ji pelê paşîn qut bike. Lêbelê, ev hîn jî windabûna daneyê ye, her çend pir piçûk be jî, ku hûn neçar in ku pê ragirin.

Xweşbextane, ew bi çavan bi tevahî nayên dîtin. Di binê spoilerê de (ji ber ku habrastorage nikare pelên mezin bigire), xwendevan dikare cûdahiyê hem bi çav û hem jî bi giraniya wan, ku bi kêmkirina nirxên pêkhateya guhertî ji orîjînal ve hatî wergirtin binirxîne: xwemalî, bi agahdariya hundur, cûdahî (reng çi qas qelstir be, ferqa di blokê de ew qas piçûktir e).

Şûna encamê

Bi berçavgirtina van hemî dijwariyan, kirîna ajokerek hişk an barkirina her tiştî li ewr dibe ku ji pirsgirêkê re çareseriyek pir hêsan xuya bike. Lê her çend em naha di demek wusa ecêb de dijîn, garantiyek tune ku sibê hîn jî gengaz be ku hûn serhêl biçin û hemî daneyên xweyên zêde li cîhek bar bikin. An jî herin dikanê û ji xwe re hard dîskê hezar terabyte din bikirin. Lê hûn her gav dikarin xaniyên heyî bikar bînin.

-> GitHub

Source: www.habr.com

Add a comment