LSB سټیګنګرافي

یو وخت ما خپله لیکنه وکړه په مرکز کې لومړی پوسټ. او دا پوسټ یو ډیر په زړه پورې ستونزې ته وقف شوی و، یعنې سټیګنګرافي. البته، په دې زاړه موضوع کې وړاندیز شوی حل د کلمې په ریښتینې معنی کې سټیګنګرافي نشي ویل کیدی. دا یوازې د فایل فارمیټونو سره یوه لوبه ده ، مګر بیا هم خورا په زړه پوري لوبه.

نن ورځ موږ به هڅه وکړو چې لږ ژور وخورئ او د LSB الګوریتم ته وګورو. که تاسو لیوالتیا لرئ، تاسو د بلی لاندې ښه راغلاست یاست. (د کټ لاندې ترافیک دی: د یو میګابایټ په اړه.)

لومړی، دا اړینه ده چې لنډه پیژندنه وکړو. هرڅوک پوهیږي چې د کریپټوګرافي هدف دا دی چې د پټو معلوماتو لوستل ناممکن کړي. البته، کریپټوګرافي خپل غوښتنلیکونه لري، مګر د معلوماتو ساتنې لپاره بله لاره شتون لري. موږ اړتیا نلرو چې معلومات کوډ کړو، مګر داسې ښکاري چې موږ یې نه لرو. له همدې امله سټیګنګرافي ایجاد شوې. ویکیپیډیا موږ ته ډاډ راکوي چې "سټیګنګرافي (له یوناني στεγανοσ - پټ او یوناني γραφω - زه لیکم، په لفظي ډول "پټ لیکنه") د لیږد حقیقت پټ ساتلو سره د معلوماتو د پټ لیږد ساینس دی.

البته، هیڅوک د کریپټوګرافیک او سټینګوګرافیک میتودونو ترکیب نه منع کوي. سربیره پردې، په عمل کې دوی دا کوي، مګر زموږ دنده د اساساتو پوهیدل دي. که تاسو د ویکیپیډیا مقاله په دقت سره مطالعه کړئ ، نو تاسو به ومومئ چې د سټیګنګرافي الګوریتمونه په نوم یادیږي. کانټینر او پیغام. کانټینر هر هغه معلومات دي چې زموږ د پټ پیغام پټولو کې مرسته کوي.

زموږ په قضیه کې، کانټینر به د BMP بڼه کې یو انځور وي. لومړی، راځئ چې د دې فایل جوړښت وګورو. فایل په 4 برخو ویشل کیدی شي: د فایل سرلیک، د عکس سرلیک، پیلټ او پخپله عکس. زموږ د موخو لپاره، موږ یوازې باید پوه شو چې په سرلیک کې څه لیکل شوي.

د سرلیک لومړی دوه بایټونه د BM لاسلیک دی، بیا په بایټ کې د فایل اندازه په دوه کلمه لیکل کیږي، راتلونکی 4 بایټونه خوندي دي او باید صفر ولري، او په پای کې، بله ډبل کلمه د پیل څخه آفسیټ لري. د عکس اصلي بایټ ته فایل. په 24-bit bmp فایل کې، هر پکسل د درې BGR بایټ سره کوډ شوی.

اوس موږ پوهیږو چې څنګه انځور ته ورسیږو، ټول هغه څه چې پاتې دي د دې پوهیدل دي چې موږ څنګه کولی شو هغه معلومات ولیکو چې موږ ورته اړتیا لرو. د دې لپاره موږ به د LSB میتود ته اړتیا ولرو. د میتود جوهر په لاندې ډول دی: موږ د رنګ کوډ کولو مسؤلیت په بایټ کې لږترلږه د پام وړ بټونه ځای په ځای کوو. راځئ چې ووایو که زموږ د پټ پیغام راتلونکی بایټ 11001011 وي، او په عکس کې بایټونه ... 11101100 01001110 01111100 0101100111...، نو کوډ کول به داسې ښکاري. موږ به د پټ پیغام بایټ په 4 دوه بټ برخو وویشو: 11, 00, 10, 11, او د عکس ټیټ ترتیب بټونه به د پایلې ټوټو سره بدل کړو: ...11101111 01001100 01111110 0101100111…. دا ډول بدیل عموما د انسان سترګو ته د پام وړ ندي. سربیره پردې، ډیری زاړه تولیدي وسایل به حتی د دې وړ وړ بدلونونو ښودلو توان ونلري.

دا روښانه ده چې تاسو کولی شئ نه یوازې 2 لږ مهم بټونه بدل کړئ، مګر د دوی هر شمیر. لاندې نمونه شتون لري: څومره چې موږ ډیر بټونه بدلوو، هومره نور معلومات چې موږ یې پټولی شو، او دا به په اصلي عکس کې ډیر مداخله وکړي. د مثال په توګه، دلته دوه انځورونه دي:

LSB سټیګنګرافي
LSB سټیګنګرافي

زما د ډیرو هڅو سره سره، ما د دوی ترمنځ توپیر ونه لیدل، مګر بیا هم، په دویم عکس کې، د بیان شوي میتود په کارولو سره، د لیوس کارول شعر "د سنارک ښکار" پټ دی. که تاسو دا تر اوسه لوستلی وي، نو تاسو شاید د پلي کولو په اړه زده کړې سره علاقه لرئ. دا خورا ساده دی، مګر زه به تاسو ته سمدستي خبرداری درکړم چې هرڅه په ډیلفي کې ترسره کیږي. د دې لپاره دوه دلیلونه شتون لري: 1. زما په اند ډیلفي ښه ژبه ده. 2. دا برنامه د کمپیوټر لید د اساساتو په اړه د کورس چمتو کولو په جریان کې رامینځته شوې ، او هغه هلکان چې زه یې دا کورس تدریسوم تر اوسه د ډیلفي پرته بل څه نه پوهیږي. د هغو کسانو لپاره چې د نحو سره بلد نه دي، یو شی باید تشریح شي: shl x د x لخوا کیڼ اړخ ته یو څه بدلون دی، shr x د x په واسطه ښي خوا ته د بټ اړخ بدلون دی.

موږ فرض کوو چې موږ په کانټینر کې په تار کې زیرمه شوي متن لیکو او لاندې دوه بایټونه ځای په ځای کوو:
د ثبت کوډ:

د i:=1 څخه اوږدوالی(str) لپاره
    پيل كيدل؛ شروع كيدل: او چنېدل، راوتل
      l1:=byte(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.Position:=f.Position-1;
      tmp:=((tmp shr 2) shl 2)+l1;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Position:=f.Position-1;
      tmp:=((tmp shr 2) shl 2)+l2;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Position:=f.Position-1;
      tmp:=((tmp shr 2) shl 2)+l3;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Position:=f.Position-1;
      tmp:=((tmp shr 2) shl 2)+l4;
      f.WriteBuffer(tmp,1);
 
    پای؛

د لوستلو لپاره کوډ:

د i:=1 د MsgSize لپاره
    پيل كيدل؛ شروع كيدل: او چنېدل، راوتل
      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);
    پای؛

ښه، د ریښتیا سست کسانو لپاره - د پروګرام او د هغې د سرچینې کوډ سره اړیکه ونیسئ.

سپوږمکۍ.

سرچینه: www.habr.com

Add a comment