LSB steganography

Ni akoko kan Mo kọ mi akọkọ post on hobu. Ati pe ifiweranṣẹ yẹn jẹ igbẹhin si iṣoro ti o nifẹ pupọ, eyun steganography. Dajudaju, ojutu ti a dabaa ninu koko atijọ yẹn ko le pe ni steganography ni itumọ otitọ ti ọrọ naa. O kan jẹ ere pẹlu awọn ọna kika faili, ṣugbọn ere ti o nifẹ si sibẹsibẹ.

Loni a yoo gbiyanju lati ma wà diẹ jinle ati ki o wo LSB algorithm. Ti o ba ti wa ni nife, ti o ba wa kaabo labẹ o nran. (Labẹ gige jẹ ijabọ: nipa megabyte kan.)

Ni akọkọ, o jẹ dandan lati ṣe ifihan kukuru kan. Gbogbo eniyan mọ pe idi ti cryptography ni lati jẹ ki ko ṣee ṣe lati ka alaye asiri. Nitoribẹẹ, cryptography ni awọn ohun elo rẹ, ṣugbọn ọna miiran wa si aabo data. A ko ni lati encrypt alaye naa, ṣugbọn ṣe dibọn pe a ko ni. Eleyi jẹ gbọgán idi ti steganography ti a se. Wikipedia ṣe idaniloju fun wa pe “steganography (lati Greek στεγανοσ - ti o farapamọ ati Giriki γραφω - Mo kọ, ni itumọ ọrọ gangan “kikọ asiri”) jẹ imọ-jinlẹ ti gbigbe alaye ti o farapamọ nipa titọju otitọ ti gbigbe ni ikọkọ.

Nitoribẹẹ, ko si ẹnikan ti o ṣe idiwọ apapọ cryptographic ati awọn ọna steganographic. Pẹlupẹlu, ni iṣe wọn ṣe eyi, ṣugbọn iṣẹ wa ni lati ni oye awọn ipilẹ. Ti o ba farabalẹ ka nkan ti Wikipedia, iwọ yoo rii pe awọn algoridimu steganography pẹlu ohun ti a pe. eiyan ati ifiranṣẹ. Apoti jẹ alaye eyikeyi ti o ṣe iranlọwọ tọju ifiranṣẹ aṣiri wa.

Ninu ọran wa, eiyan yoo jẹ aworan ni ọna kika BMP. Ni akọkọ, jẹ ki a wo ọna ti faili yii. Faili naa le pin si awọn ẹya mẹrin: akọsori faili, akọsori aworan, paleti ati aworan funrararẹ. Fun awọn idi wa, a nilo lati mọ ohun ti a kọ sinu akọsori.

Awọn baiti meji akọkọ ti akọsori jẹ ibuwọlu BM, lẹhinna iwọn faili ni awọn baiti ni a kọ sinu ọrọ ilọpo meji, awọn baiti mẹrin ti o tẹle ti wa ni ipamọ ati pe o gbọdọ ni awọn odo, ati nikẹhin, ọrọ ilọpo meji miiran ni aiṣedeede lati ibẹrẹ ti faili si awọn baiti gangan ti aworan naa. Ninu faili bmp 4-bit kan, ẹbun kọọkan ni koodu pẹlu awọn baiti BGR mẹta.

Bayi a mọ bi a ṣe le de aworan naa, o wa lati ni oye bi a ṣe le kọ alaye ti a nilo nibẹ. Fun eyi a yoo nilo ọna LSB. Koko-ọrọ ti ọna naa jẹ atẹle yii: a rọpo awọn iwọn pataki ti o kere julọ ninu awọn baiti ti o ni iduro fun fifi koodu awọ. Jẹ ki a sọ ti awọn baiti atẹle ti ifiranṣẹ aṣiri wa jẹ 11001011, ati awọn baiti ti o wa ninu aworan naa jẹ...11101100 01001110 01111100 0101100111..., lẹhinna koodu koodu yoo dabi eyi. A yoo pin baiti ifiranṣẹ aṣiri si awọn ẹya meji-bit 4: 11, 00, 10, 11, ati rọpo awọn iwọn kekere ti aworan naa pẹlu awọn ajẹkù ti o yọrisi: ...11101111 01001100 01111110…. Iru rirọpo bẹ ni gbogbogbo ko ṣe akiyesi si oju eniyan. Jubẹlọ, ọpọlọpọ awọn agbalagba o wu awọn ẹrọ yoo ko paapaa ni anfani lati han iru kekere ayipada.

O han gbangba pe o le yipada kii ṣe awọn iwọn pataki 2 ti o kere ju, ṣugbọn nọmba eyikeyi ninu wọn. Ilana atẹle wa: diẹ sii diẹ sii ti a yipada, alaye diẹ sii ti a le tọju, ati kikọlu diẹ sii eyi yoo fa ni aworan atilẹba. Fun apẹẹrẹ, nibi ni awọn aworan meji:

LSB steganography
LSB steganography

Pelu igbiyanju mi ​​ti o dara julọ, Emi ko le ri iyatọ laarin wọn, ṣugbọn sibẹsibẹ, ni aworan keji, ni lilo ọna ti a ṣe apejuwe, orin Lewis Carroll "Sode ti Snark" ti wa ni pamọ. Ti o ba ti ka eyi jina, lẹhinna o le nifẹ lati kọ ẹkọ nipa imuse naa. O rọrun pupọ, ṣugbọn Emi yoo kilo fun ọ lẹsẹkẹsẹ pe ohun gbogbo ni a ṣe ni Delphi. Awọn idi meji lo wa fun eyi: 1. Mo ro pe Delphi jẹ ede ti o dara; 2. Eto yii ni a bi ninu ilana ti ngbaradi ikẹkọ lori awọn ipilẹ ti iran kọnputa, ati awọn ọmọkunrin ti MO nkọ ẹkọ yii ko tii mọ ohunkohun miiran ju Delphi. Fun awọn ti ko mọ pẹlu sintasi, ohun kan nilo lati ṣe alaye: shl x jẹ iyipada bitwise si apa osi nipasẹ x, shr x jẹ iyipada bitwise si ọtun nipasẹ x.

A ro pe a n kọ ọrọ ti o fipamọ sinu okun sinu apoti ati rọpo awọn baiti meji isalẹ:
Koodu igbasilẹ:

fun i: = 1 si ipari (str) ṣe
    berè
      l1:=baiti(str[i]) shr 6;
      l2:=byte(str[i]) shl 2; l2:=l2 shr 6;
      l3:=byte(str[i]) shl 4; l3:=l3 shr 6;
      l4:=byte(str[i]) shl 6; l4:=l4 shr 6;
 
      f.ReadBuffer (tmp,1);
      f.Ipo:=f.Ipo-1;
      tmp:=((tmp shr 2) shl 2)+l1;
      f.WriteBuffer (tmp,1);
 
      f.ReadBuffer (tmp,1);
      f.Ipo:=f.Ipo-1;
      tmp:=((tmp shr 2) shl 2)+l2;
      f.WriteBuffer (tmp,1);
 
      f.ReadBuffer (tmp,1);
      f.Ipo:=f.Ipo-1;
      tmp:=((tmp shr 2) shl 2)+l3;
      f.WriteBuffer (tmp,1);
 
      f.ReadBuffer (tmp,1);
      f.Ipo:=f.Ipo-1;
      tmp:=((tmp shr 2) shl 2)+l4;
      f.WriteBuffer (tmp,1);
 
    ipari;

koodu lati ka:

fun i:=1 si MsgSize ṣe
    berè
      f.ReadBuffer (tmp,1);
      l1:=tmp shl 6;
      f.ReadBuffer (tmp,1);
      l2:=tmp shl 6; l2:=l2 shr 2;
      f.ReadBuffer (tmp,1);
      l3:=tmp shl 6; l3:=l3 shr 4;
      f.ReadBuffer (tmp,1);
      l4:=tmp shl 6; l4:=l4 shr 6;
      str: = str+char(l1+l2+l3+l4);
    ipari;

O dara, fun awọn ọlẹ gaan - ọna asopọ si awọn eto ati awọn oniwe-orisun koodu.

O ṣeun.

orisun: www.habr.com

Fi ọrọìwòye kun