LSB اسٽيگنگرافي

هڪ دفعي مون پنهنجو لکيو حب تي پهرين پوسٽ. ۽ اهو پوسٽ هڪ تمام دلچسپ مسئلو ڏانهن وقف ڪيو ويو، يعني اسٽيگنگرافي. يقينن، ان پراڻي موضوع ۾ تجويز ڪيل حل کي لفظ جي صحيح معنيٰ ۾ اسٽيگنگرافي نٿو چئي سگهجي. اهو صرف هڪ راند آهي فائل فارميٽ سان، پر ان جي باوجود هڪ خوبصورت دلچسپ راند.

اڄ اسان ڪوشش ڪنداسين ته ٿورڙو اونڌو ڪرڻ ۽ LSB الگورتھم کي ڏسو. جيڪڏھن توھان چاھيو ٿا، توھان کي ڀليڪار آھي ٻلي ھيٺ. (ڪٽ جي هيٺان ٽرئفڪ آهي: اٽڪل هڪ ميگا بائيٽ.)

سڀ کان اول، ان جو مختصر تعارف ڪرڻ ضروري آهي. هرڪو ڄاڻي ٿو ته ڪرپٽ گرافي جو مقصد اهو آهي ته ڳجهي معلومات کي پڙهڻ ناممڪن آهي. يقينا، cryptography ان جي ايپليڪيشنون آهن، پر ڊيٽا جي حفاظت لاء هڪ ٻيو طريقو آهي. اسان کي معلومات کي انڪرپٽ ڪرڻ جي ضرورت ناهي، پر اهو فرض ڪيو ته اسان وٽ اهو ناهي. اهو ئي سبب آهي ته اسٽيگنگرافي ايجاد ڪئي وئي هئي. وڪيپيڊيا اسان کي يقين ڏياريو آهي ته “اسٽيگنوگرافي (يوناني στεγανοσ - hidden ۽ يوناني γραφω - مان لکان ٿو، لفظي طور تي "راز لکڻ") اها سائنس آهي جيڪا معلومات جي پوشيده منتقلي جي سائنس آهي جيڪا منتقلي جي حقيقت کي ڳجهي رکندي آهي.

يقينن، ڪو به منع نه ڪندو آهي گڏ ڪرڻ سان گڏ cryptographic ۽ steganographic طريقن. ان کان سواء، عملي طور تي اهي ائين ڪندا آهن، پر اسان جو ڪم بنيادي ڳالهين کي سمجهڻ آهي. جيڪڏهن توهان وڪيپيڊيا جي آرٽيڪل کي غور سان پڙهو ٿا، توهان کي معلوم ٿيندو ته اسٽيگنگرافي الگورتھم شامل آهن جنهن کي سڏيو ويندو آهي. ڪنٽينر ۽ پيغام. هڪ ڪنٽينر ڪا به معلومات آهي جيڪا اسان جي ڳجهي پيغام کي لڪائڻ ۾ مدد ڪري ٿي.

اسان جي صورت ۾، ڪنٽينر 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

تبصرو شامل ڪريو