LSB ပုံသဏ္ဍာန်

တစ်ချိန်က ကျွန်တော်ရေးတယ်။ hub မှာ ပထမဆုံးတင်တာပါ။. ပြီးတော့ ဒီပို့စ်ဟာ အလွန်စိတ်ဝင်စားစရာကောင်းတဲ့ ပြဿနာတစ်ခုဖြစ်တဲ့ Steganography ကို ရည်ညွှန်းပါတယ်။ ဟုတ်ပါတယ်၊ ဒီအကြောင်းအရာဟောင်းမှာ အဆိုပြုထားတဲ့ အဖြေကို စကားလုံးရဲ့ စစ်မှန်တဲ့သဘောအရ Steganography လို့ မခေါ်နိုင်ပါဘူး။ ၎င်းသည် ဖိုင်ဖော်မတ်များပါသည့် ဂိမ်းတစ်ခုမျှသာဖြစ်သော်လည်း အလွန်စိတ်ဝင်စားစရာကောင်းသည့် ဂိမ်းတစ်ခုဖြစ်သည်။

ယနေ့ကျွန်ုပ်တို့သည်နည်းနည်းလေးနက်အောင်ကြိုးစားပြီး LSB algorithm ကိုကြည့်ရှုပါမည်။ စိတ်ဝင်စားရင် ကြောင်အောက်မှာ ကြိုဆိုပါတယ်။ (ဖြတ်တောက်မှုအောက်တွင် ယာဉ်အသွားအလာ- မီဂါဘိုက်ခန့်ရှိသည်။)

ပထမဆုံးအနေနဲ့ အတိုချုံးမိတ်ဆက်ဖို့ လိုပါတယ်။ cryptography ၏ ရည်ရွယ်ချက်မှာ လျှို့ဝှက်အချက်အလက်များကို ဖတ်ရန် မဖြစ်နိုင်ကြောင်း လူတိုင်းသိပါသည်။ ဟုတ်ပါတယ်, cryptography တွင်၎င်း၏အသုံးချပရိုဂရမ်များပါရှိသော်လည်းဒေတာကိုကာကွယ်ရန်အခြားနည်းလမ်းတစ်ခုရှိသည်။ ကျွန်ုပ်တို့သည် အချက်အလက်ကို ကုဒ်ဝှက်ရန် မလိုအပ်သော်လည်း ၎င်းကို ကျွန်ုပ်တို့တွင် မရှိဟု ဟန်ဆောင်ပါ။ ဤသည်မှာ တိကျစွာ steganography ကို တီထွင်ခဲ့ခြင်း ဖြစ်သည်။ “Steganography (ဂရိ στεγανοσ - ဝှက်ထားပြီး ဂရိဘာသာ γραφω - ငါရေးတယ်၊ စာသားအရ “လျှို့ဝှက်စာရေး”) ဟာ လျှို့ဝှက်အချက်အလက်တွေကို လျှို့ဝှက်ထားခြင်းအားဖြင့် သတင်းအချက်အလက်တွေကို လျှို့ဝှက်ပေးပို့ခြင်းဆိုင်ရာ သိပ္ပံပညာဖြစ်တယ်လို့ ဝီကီပီးဒီးယားက အာမခံပါတယ်။

ဟုတ်ပါတယ်၊ ဘယ်သူကမှ cryptographic နဲ့ steganographic နည်းလမ်းတွေကို ပေါင်းစပ်တာကို တားမြစ်ထားမှာ မဟုတ်ပါဘူး။ ထို့အပြင်၊ လက်တွေ့တွင် ၎င်းတို့သည် ယင်းကိုလုပ်ဆောင်သော်လည်း ကျွန်ုပ်တို့၏တာဝန်မှာ အခြေခံများကို နားလည်ရန်ဖြစ်သည်။ Wikipedia ဆောင်းပါးကို သေချာလေ့လာပါက၊ steganography algorithms တွင် ၎င်းဟုခေါ်သော အရာများပါဝင်သည်ကို သင်တွေ့ရှိနိုင်မည်ဖြစ်သည်။ ကွန်တိန်နာနှင့်မက်ဆေ့ခ်ျ။ ကွန်တိန်နာဆိုသည်မှာ ကျွန်ုပ်တို့၏လျှို့ဝှက်စာတိုကို ဖုံးကွယ်ရန် ကူညီပေးသည့် မည်သည့်အချက်အလက်မဆိုဖြစ်သည်။

ကျွန်ုပ်တို့၏အခြေအနေတွင်၊ ကွန်တိန်နာသည် BMP ဖော်မတ်ဖြင့် ပုံဖြစ်လိမ့်မည်။ အရင်ဆုံး ဒီဖိုင်ရဲ့ ဖွဲ့စည်းပုံကို ကြည့်ရအောင်။ ဖိုင်ကို အပိုင်း ၄ ပိုင်း ခွဲခြားနိုင်သည်- ဖိုင် ခေါင်းစီး၊ ရုပ်ပုံ ခေါင်းစီး၊ ပျဉ်ချပ် နှင့် ရုပ်ပုံ ကိုယ်တိုင်။ ကျွန်ုပ်တို့၏ရည်ရွယ်ချက်များအတွက်၊ ကျွန်ုပ်တို့သည် ခေါင်းစီးတွင် ရေးထားသည်ကို သိရန်သာ လိုအပ်ပါသည်။

ခေါင်းစီး၏ပထမနှစ်ဘိုက်သည် BM လက်မှတ်ဖြစ်ပြီး၊ ထို့နောက် bytes တွင်ဖိုင်အရွယ်အစားကိုစကားလုံးနှစ်လုံးဖြင့်ရေးသားသည်၊ နောက် 4 bytes ကိုသီးသန့်ထားပြီးသုညပါရှိရမည်၊ နောက်ဆုံးတွင်အခြားစကားလုံးနှစ်ထပ်သည်၎င်း၏အစမှ offset ပါရှိသည်။ ပုံ၏ တကယ့် bytes သို့ ဖိုင်။ 24-bit bmp ဖိုင်တွင်၊ pixel တစ်ခုစီကို BGR bytes သုံးမျိုးဖြင့် ကုဒ်လုပ်ထားသည်။

ယခု ကျွန်ုပ်တို့သည် ရုပ်ပုံသို့ မည်သို့သွားရမည်ကို သိထားပြီး ကျန်အရာအားလုံးမှာ ထိုနေရာတွင် ကျွန်ုပ်တို့လိုအပ်သော အချက်အလက်များကို မည်သို့ရေးနိုင်သည်ကို နားလည်ရန်ဖြစ်သည်။ ဤအတွက် ကျွန်ုပ်တို့သည် LSB နည်းလမ်းကို လိုအပ်ပါသည်။ နည်းလမ်း၏ အနှစ်သာရမှာ အောက်ပါအတိုင်းဖြစ်သည်- အရောင်ကုဒ်ပြောင်းခြင်းအတွက် တာဝန်ရှိသော bytes ရှိ သိသာထင်ရှားသော bits များကို ကျွန်ုပ်တို့ အစားထိုးပါသည်။ ကျွန်ုပ်တို့၏လျှို့ဝှက်စာတို၏နောက်တစ်ဘိုက်သည် 11001011 ဖြစ်ပြီး ပုံရှိဘိုက်များသည်... 11101100 01001110 01111100 0101100111... ဆိုကြပါစို့၊ ကုဒ်ကုဒ်သည် ဤကဲ့သို့ဖြစ်လိမ့်မည်။ လျှို့ဝှက်မက်ဆေ့ဂျ် byte ကို နှစ်ဘစ် အပိုင်း 4 ခုအဖြစ် ပိုင်းခြားပါမည်- 11, 00, 10, 11, နှင့် ပုံ၏ အနိမ့်ပိုင်းဘစ်များကို ရလဒ်အပိုင်းအစများဖြင့် အစားထိုးမည်- ...11101111 01001100 01111110 0101100111…. ထိုသို့သော အစားထိုးမှုသည် ယေဘုယျအားဖြင့် လူ့မျက်စိအတွက် မသိသာပေ။ ထို့အပြင်၊ အဟောင်းအထွက်စက်ပစ္စည်းများစွာသည် ထိုကဲ့သို့သော အသေးစားပြောင်းလဲမှုများကိုပင် ပြသနိုင်မည်မဟုတ်ပေ။

သိသာထင်ရှားသော bit 2 ခုသာမကဘဲ မည်သည့်အရေအတွက်ကိုမဆို သင်ပြောင်းလဲနိုင်သည်မှာ ရှင်းပါသည်။ အောက်ပါပုံစံရှိပါသည်- ကျွန်ုပ်တို့သည် bit များပိုမိုပြောင်းလဲလေ၊ အချက်အလက်ပိုဝှက်နိုင်လေလေ၊ ၎င်းသည် မူရင်းပုံတွင် ဝင်ရောက်စွက်ဖက်လေလေဖြစ်သည်။ ဥပမာအားဖြင့်၊ ဤတွင် ပုံနှစ်ပုံဖြစ်သည်-

LSB ပုံသဏ္ဍာန်
LSB ပုံသဏ္ဍာန်

ကျွန်ုပ်၏အကောင်းဆုံးကြိုးစားမှုများကြားမှ ခြားနားချက်ကို ကျွန်ုပ်မမြင်နိုင်သော်လည်း၊ မည်သို့ပင်ဆိုစေကာမူ ဒုတိယပုံတွင် ဖော်ပြထားသောနည်းလမ်းကို အသုံးပြု၍ Lewis Carroll ၏ကဗျာ “The Hunting of the Snark” ကို ဝှက်ထားသည်။ ဒီအကြောင်းကို ဖတ်ပြီးပြီ ဆိုရင် အကောင်အထည်ဖော်မှု အကြောင်းကို လေ့လာဖို့ စိတ်ဝင်စားနေလောက်ပါပြီ။ အဲဒါက တော်တော်ရိုးရှင်းပါတယ်၊ ဒါပေမယ့် Delphi မှာ အရာအားလုံးပြီးသွားပြီလို့ မင်းကို ငါချက်ချင်းသတိပေးမယ်။ ဒီအတွက် အကြောင်းပြချက် နှစ်ခုရှိပါတယ်- 1. Delphi ဟာ ဘာသာစကားကောင်းတစ်ခုလို့ ကျွန်တော်ထင်ပါတယ်။ 2. ဤပရိုဂရမ်သည် ကွန်ပြူတာအမြင်ဆိုင်ရာ အခြေခံသင်တန်းကို ပြင်ဆင်နေစဉ်တွင် မွေးဖွားလာခဲ့ပြီး ဤသင်တန်းတွင် ကျွန်ုပ်သင်ကြားနေသော ယောက်ျားများသည် Delphi မှလွဲ၍ အခြားဘာမှမသိကြသေးပါ။ syntax နှင့် မရင်းနှီးသူများအတွက်၊ တစ်ခုရှင်းပြလိုသည်- shl x သည် x ဖြင့် ဘယ်ဘက်သို့ အနည်းငယ်ပြောင်းသည်၊ shr x သည် x ဖြင့် ညာဘက်သို့ အနည်းငယ်ပြောင်းသည်။

ကျွန်ုပ်တို့သည် ကွန်တိန်နာထဲသို့ စာကြောင်းတစ်ခုတွင် သိမ်းဆည်းထားသော စာသားကို ရေးသားနေပြီး အောက်နှစ်ဘိုက်ကို အစားထိုးနေသည်ဟု ကျွန်ုပ်တို့ ယူဆသည်-
မှတ်တမ်းတင်ကုဒ်-

for i:=1 to length(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);
 
    အဆုံး;

ဖတ်ရန် ကုဒ်

for i:=1 to 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);
    အဆုံး;

တကယ်ပျင်းသူတွေအတွက်- ပရိုဂရမ်နှင့် ၎င်း၏အရင်းအမြစ်ကုဒ်သို့ ချိတ်ဆက်ပါ။.

သငျသညျကိုကျေးဇူးတင်ပါသည်။

source: www.habr.com

မှတ်ချက် Add