Showing posts with label Happy Hacking. Show all posts
Showing posts with label Happy Hacking. Show all posts

July 21, 2012

Rot13 Encoding Algorithm

Happy Hacking ခေါင်းစဉ်ဖြင့် မရေးဖြစ်ခဲ့သည်မှာ ကြာပြီဖြစ်သည်။ အလုပ်များလွန်း၍ စိတ်ရှုပ်လာသော အခါမျိုးတွင် ပေါ့ပေါ့ပါးပါး အလဂိုရီဇင်များအား ဂျာဗားဖြင့် ပြန်လည်ရေးသားချင်းသည် ကျွှန်တော့်အတွက်တော့ လွန်စွာကောင်းမွန်သော အပန်းဖြေနည်း တစ်ခုဖြစ်ပါသည်။ ဒီတစ်ခေါက်တော့ Encoding များတွင် အသုံးများသော Rot13 အလဂိုရီဇင် အကြောင်းကို လေ့လာရေးသားပါဦးမည်။

rot13 သည် ဆီးဇာစကားဝှက် (Caesar's cipher) အမျိုးအစား တစ်မျိုးဖြစ်ပါသည်။ ရောမဗိုလ်ချုပ် ဂျူလီယက် ဆီဇာက စတင် အသုံးပြုခဲ့ သောကြောင့် ဆီဇာစကားဝှက်ဟု အမည်ရခြင်းဖြစ်ပါသည်။ အသုံးပြုပုံမှာ စကားလုံးများတွင် ပါဝင်သော စာလုံးများအား ၃နေရာ ရွှေ့ခြင်းဖြင့် မှုရင်း စကားလုံးအား စကားဝှက်ဝှက်ခြင်း ဖြစ်ပါသည်။

Rot13 သည် Rotate 13 ၏ အတိုကောက် အခေါ်အဝေါ်ဖြစ်ပြီး၊ အင်္ဂလိပ်စာလုံး များအား ၁၃ နေရာ အနောက်သို့ရွှေ့ခြင်း အားဖြင့် စကားဝှက်ဖွဲ့ခြင်း ကိုဆိုလိုပါသည်။ ဤမှ ရိုးရှင်းသော အလဂိုရီဇင်ဖြစ်သော်လည်း လွယ်လင့်တကူ အသုံးပြုနိုင်ခြင်းတို့ကြောင့် Unix OS များတွင် Embedded Program အဖြစ်သော်၎င်း၊ PHP တွင် str_rot13 အဖြစ်၎င်း ပံ့ပိုးထားပါသည်။

အထက်ဖော်ပြပါပုံအတိုင်း rot13 တွင် အင်္ဂလိပ်စာလုံးများအား ၁၃ နေရာရွှေ့၍ စကားဝှက်လုပ်ထားခြင်းသာ ဖြစ်၏။ အင်္ဂလိပ်စာလုံးများသည် အားလုံး ၂၆လုံးရှိသောကြောင့် ၁၃ နေရာ နှစ်ခါရွှေ့ပါက မှုရင်းစာလုံးကို ပြန်ရရှိမည် ဖြစ်ပါသည်။ မှုရင်းစကားလုံးအား အလွယ်တကူ ပြန်လည်ဖော်ထုတ်နိုင်ခြင်း၊ Alphabet အပြင် ကိန်းဂဏာန်းများအား ပြောင်းလည်းမပေးနိုင်ခြင်းတို့ကြောင့် အားနည်းသော စကားဝှက်ဘာသာရပ် အနေဖြင့် ဖော်ပြလေ့ရှိပါသည်။ သို့ရာတွင် အလွယ်တကူ အသုံးပြုနိုင်ခြင်းတို့ကြောင့် သိပ်ပြီး အရေးမကြီးသော ဂိမ်းကဲ့သို့သော အပလီကေးရှင်းများတွင် အသုံးပြုလေ့ရှိပါသည်။ ကျွှန်တော်တို့ လက်တွေ့ ဂျာဗားဖြင့် ရေးကြည့်ပါဦးမည်။

Rot13String.java
public class Rot13String {
 
 private StringBuilder sb;
 
 public Rot13String(String str) {
  sb = new StringBuilder();
  if(null != str && !str.isEmpty()) {
   for(char c : str.toCharArray()) {
    sb.append(getRot13Char(c));
   }
  }
 }
 
 private char getRot13Char(char c) {
  if((c >= 'a' && c <= 'm') || (c >= 'A' && c <= 'M')) 
   c += 13;
  else if ((c >= 'n' && c <= 'z') || (c >= 'N' && c <= 'Z'))
   c -= 13;
  return c;
 }

 public String encode() {
  return this.sb.toString();
 }
 
 public static void main(String[] args) {
  // Origin
     String origin = "hello HELLO";
     System.out.println(origin);
     
     // Convert
     String conv = new Rot13String(origin).encode();
     System.out.println(conv);
     
     // Convert(Convert())
     System.out.println(new Rot13String(conv).encode());
    }
}
ဤ Rot13 အလဂိုရီဇင်၏ နမှုနာတွင် အဓိက အလုပ်လုပ်နေသည်မှာ စာကြောင်း ၁၄ ရှိ getRot13Char လုပ်ဆောင်ချက်ပင် ဖြစ်၏။ အကယ်၍ ပါရာမီတာဖြစ်သော c သည် a မှ m အထိ ဒါမှမဟုတ် A မှ M အထိဆိုပါက c အား ၁၃ပေါင်း၍၊ c သည် n မှ z ဒါမှမဟုတ် N မှ Z အထိဆိုပါက c အား 13 နှုတ်ပြီး အစားထိုးကာ c အား ရလဒ်အဖြစ် ပြန်ပေးနေခြင်းသာ ဖြစ်၏။

ကွန်စတရက်တာတွင် အန်ကုဒ်လုပ်ချင်သည့် စကားလုံးအား ပါရာမီတာအဖြစ်ရယူပြီး အတွင်းပိုင်း စာကြောင်း ၈ တွင် For ဝါကျဖြင့် Loop လုပ်ကာ စာလုံးတစ်လုံးခြင်းအား အထက်ပါ getRot13Char လုပ်ဆောင်ချက်ကို အသုံးပြု၍ အန်ကုဒ်လုပ်ကာ StringBuilder အော့ဘဂျက်တွင် ဖြည့်စွက်ထားပါသည်။ StringBuilder အော့ဘဂျက် sb သည် Member ကိန်းရှင်ဖြစ်ပြီး၊ ကွန်စတရက်တာအား စတင်လုပ်ဆောင်သည့် အခါတွင် အန်ကုဒ်လုပ်ပြီး စာလုံးများကို ဖြည့်စွက်ပြီး ဖြစ်နေပါမည်။ ထို့နောက်တွင် encode လုပ်ဆောင်ချက်ကို ခေါ်ယူပါက sb.getString() လုပ်ဆောင်ချက်ကို ခေါ်ယူပြီး တည်ဆောက်ထားသော စာကြောင်းအား ရလဒ်အဖြစ် ပြန်ပေးမည် ဖြစ်ပါသည်။

အသုံးပြုပုံမှာ main လုပ်ဆောင်ချက်အတွင်းတွင် ဖြစ်ပါသည်။ စာကြောင်း ၂၉တွင် မှုရင်းစာလုံးအား ရေးသားစေပါသည်။ တဖန် စာကြောင်း ၃၂ ဖြင့် မှုရင်းစာလုံးအား အန်ကုဒ်လုပ်ပြီး ရလဒ်အား စာကြောင်း ၃၃ တွင် ရေးသားစေပါသည်။ နောက်ဆုံးတွင် စာကြောင်း ၃၆ ဖြင့် အန်ကုဒ်လုပ်ထားသော စာလုံးအား ထပ်မံ အန်ကုဒ်လုပ်ကာ ရေးသားစေပါသည်။

အထက်ပါ နမှုနာအား အလုပ်လုပ်ကြည့်စေသောအခါ အောက်ပါအတိုင်း တွေ့မြင်ရမည် ဖြစ်ပါသည်။


မှုရင်းစာလုံးနှင့်အန်ကုဒ်လုပ်ထားသော စာလုံးအား အန်ကုဒ်လုပ်ထားသည့် စာလုံးသည် အတူတူဖြစ်သည်ကို တွေ့ရပါလိမ့်မည်။

လေးစားစွာဖြင့်။
မင်းလွင်

March 11, 2012

လျှို့ဝှက်သော ရည်းစားစာ

Frequency analysis


စကားဝှက်ပညာ ဘာသာရပ်တစ်ခုဖြစ်သော Frequency Analysis သည်၊ မှုရင်းစာနှင့် စကားဝှက်တွင်ပါဝင်သော စာလုံးများ၏ အသုံးပြုနှုန်းကို အခြေခံ၍ စကားဝှက်နည်းကို ဖြေရှင်းသော နည်းလမ်းတစ်ခုဖြစ်ပါသည်။ ဤနည်းလမ်း၏ ဇာစ်မြစ်မှာ လွန်ခဲ့သော နှစ်ပေါင်း တစ်ထောင်ကျော်ခန့်က စတင်ခဲ့ပါသည်။ ဤနည်းလမ်းကို ၉ရာစုပိုင်းတွင် ကျော်ကြားခဲ့သော အာရပ် သိပ္ပံပညာရှင် Abu Yaqub Ibn Ishaq al-Kindi က စတင်ဖော်ဟုတ်ခဲ့ခြင်း ဖြစ်ပါသည်။

al-Kindi ၏ နီယာမမှာ သိနှင့်ပြီးဖြစ်သော ဘာသာရပ်တစ်ခုဖြင့် ရေးသားထားသော ဝှက်စာကို အဖြေထုတ်နည်းဖြစ်၏။ နည်းလမ်းမှာ ဝှက်စာတွင် အသုံးပြုထားသော မှုရင်းဘာသာရပ်ဖြင့် ရေးသားထားသည့် စာမျက်နှာ တစ်မျက်နှာခန့် ရှိသော စာတစ်စောင်ကို ယူပြီး၊ ပါဝင်သော စာလုံးတစ်လုံးစီ၏ အသုံးပြုထားသော အကြိမ်ကို ရေးတွက်ပါ။

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

ဤနည်းအားဖြင့် ၁၅ရာစုပိုင်းတွင် ဥရောပနိုင်ငံများတွင် ရေပမ်းစားလာပြီး၊ အမျိုးမျိုးသော စကားဝှက်ပညာ နည်းသစ်များနှင့် ဖြေရှင်းနည်းသစ်များ၏ အခြေခံ အတွေးအခေါ်အဖြစ် ထင်ရှားခဲ့၏။ သို့ရာတွင် ၂၀ရာစု အစပိုင်းတွင် စတင်ခဲ့သော စက်သုံးစကားဝှက်ပညာ၏ ပေါ်ပေါက်လာမှု့ကြောင့် ရိုးရှင်းသော စကားဝှက်ပညာမှ သင်္ချာနည်းပညာတို့ကို အခြေခံသော စကားဝှက်ပညာဆီသို့ ပြောင်းလည်းလာခဲ့ရပါသည်။ ထို့ကြောင့် ယနေ့ခေတ် စကားဝှက်ပညာတွင် ဤနည်းလမ်းကို အသုံးပြုနေကြသည်မှာ မရှိသလောက်ပင် နည်းပါးလာခဲ့ရပါသည်။

သို့ရာတွင် ယနေ့ထက်တိုင် ခေတ်ဟောင်း ဘာသာစကားများကို လေ့လာ ဖော်ထုတ်ရာတွင် Frequency Analysis ကို အသုံးပြုမြဲ ဖြစ်ပါသည်။


ဖြေရှင်းရန် ပုဒ်စာ


ယခုတစ်ခေါက် ဖြေရှင်းရန် ပုဒ်စာမှာ Puzzles for Hakkers မဂ္ဂဇင်း (ဂျပန်ဘာသာပြန်) မှ ကောက်နှုတ်ထားသော စာပေးစာယူ ကျော်ကြားသူများ ပဲဖြစ်ပါသည်။ အထက်ပါ Frequency Analysis ကို အသုံးပြု၍ ဖြေရှင်းကြည့်ပါမည်။


စာပေးစာယူ ကျော်ကြားသူများ

နာမည်ကြီး ပေါ့အဆိုတော် Pritney သည် သူမနီးပါး နာမည်ကြီး Lustin နှင့် ရည်းစားဖြစ်ကာစကဖြစ်၏။ သူတို့ သမီးရည်းစားနှစ်ယောက်သည် မတွေ့ရသည့်ရက်များတွင် လွမ်းရသည့်အကြောင်းများကို သီကာဖွဲ့ကာဖြင့် မေးလ်သဝဏ်လွှာများဖြင့် အလွမ်းများကို ဖလှယ်ခဲ့ကြလေသည်။ ကွန်ပျူတာဘက်တွင် ကျွမ်းကြင်သော Pritney သည် သူတို့၏ လျှို့ဝှက်ချက်များကို ဟက်ကာများကို ခိုးနားထောင်ပြီး၊ အတင်းအဖျင်း စာစောင်များမှာ သွားရောင်းစားမည်ကို အလွန်စိုးရိမ်ခဲ့၏။

လျှို့ဝှက်ချက်များကို မပေါက်ကြားစေရန် သူတို့သည် အင်္ဂလိပ် စာလုံးများအား နေရာလည်းသုံးခြင်းအားဖြင့် စာကားဝှက်လုပ်ခဲ့ကြ၏။ ဥပမာအားဖြင့် A နေရာတွင် B၊ B နေရာတွင် Z အစရှိသဖြင့် လည်းလှယ်အသုံးပြုနည်းဖြစ်၏။ သို့ရာတွင် လက်တွေ့သူတို့နှစ်ဦး အသုံးပြုခဲ့ကြသည်မှာ ဤစာလုံးများ ဟုတ်ချင်မှဟုတ်ပါလိမ့်မည်။ ပြောင်းလည်းထားသော စာလုံးများကို သိရှိသူမှာ သူတို့နှစ်ဦးသာ ရှိပါသဖြင့် အကယ်၍ ဟက်ကာများက မေးလ်များကို ကြားဖြတ်ခိုးယူနိုင်ဦးတော့ ဘာရေးထားမှန်း နားလည်မည် မဟုတ်။ ဤနည်းအားဖြင့် Pritney နှင့် Lustin တို့သည် ချစ်မေးလ်သဝဏ်လွှာများကို စကားဝှက်လုပ်ပြီး အလွမ်းသည်ခဲ့ကြလေသည်။

ထိုအကြောင်းကိုသိသော ကျွှန်တော်တို့၏ ဇာတ်လိုက်ကြီး Smithnik သည်၊ လွန်စာစိတ်ဝင်စားသွားပါသည်။ ထို့အတွက် အတင်းအဖျင်းစာစောင် Yellow Place ဖြင့် Pritney ၏ ရီးစားစာခိုးရန် ပရိုဂျက်ကြီးကို လက်ခံစာချုပ်ချုပ်ခဲ့ပါသည်။ နောက်ဆုံးတွင် Pritney ၏ ချစ်မေးလ်သဝဏ်လွှာ တစ်စောင်ကို ကြားဖြတ် ခိုးယူနိုင်ခဲ့ပါသည်။ ခက်ခဲခဲ့သည်မှာ ဤနေရာအထိဖြစ်ပါသည်။ Pritney ၏ စကားဝှက်ကိုမူ Smithnik သည် ထမင်းစားရေးသောက် သကဲ့သို့ ချက်ခြင်းပင် ဖြေရှင်းနိုင်ခဲ့၏။


ဤတစ်ခေါက် ပုဒ်စာမှာ Pritney ၏ ချစ်မေးလ်သဝဏ်လွှာကို စကားဝှက်မှ အဖြေထုတ်ခြင်း ဖြစ်ပါသည်။ ချစ်မေးလ်သဝဏ်လွှာ၏ မှုရင်းကို ဤနေရာတွင် ဒေါင်းလုဒ် လုပ်ယူနိုင်ပါသည်။


ဖြေရှင်းချက်

ဤနည်းလမ်းသည် Conan Doyle ရေးသားခဲ့သော The Adventure Of The Dancing Men ဝတ္တုတိုထဲကလို ဖြစ်၏။ လူရုပ်ကလေးများဖြင့် စာလုံးများကို အစားထိုး အသုံးပြုခဲ့သည်ကို သတိရပါလိမ့်မည်။ ဤနေရာတွင်လည်း ထိုနည်းတူပင် စာလုံးများကို အခြားသော စာလုံးများနှင့် အစားထိုးအသုံးပြု နေခြင်းဖြစ်၏။

ဤပုဒ်စာအား ကျွှန်တော်တို့ Frequency Analysis ကို အခြေခံပြီး ဖြေရှင်းသွားပါမည်။ ဤနမှုနာအား ဖြေရှင်းရန် အပလီကေးရှင်း တစ်ခုကို ရေးသားခဲ့ပါသည်။ စာကြောင်းတစ်ခု၏ စာလုံးများအား ပါဝင်သော အသုံးပြုနှုန်းကို တွက်ချက်နိုင်သော FreeqString နှင့် အသုံးပြုနိုင်သော FreeqChar ကလပ်စ် နှင့် ၎င်းတို့ကို ဖော်ပြအသုံးပြုနိုင်သော FreeqPanel တို့ဖြစ်ပါသည်။ တဖန် CoolCrypto တွင်အသုံးပြုသော နမှုနာအားလည်း ဤနေရာတွင် ပြန်လည်အသုံးပြုနိုင်ရန် GUI အပလီကေးရှင်း အဖြစ် ရေးသားခဲ့ပါသည်။

ဤအပလီကေးရှင်းမှာ ရေးသားရင်း Java 7 ကို စမ်းသပ်အသုံးပြုလိုပါ၍ Java 7 ကိုအခြေခံ၍ ရေးသားထားပါသည်။ ထို့အတွက် အသုံးပြုနိုင်ရန် Java 7 ကို အသုံးပြုရန် လိုအပ်ပါသည်။

၁ ။ နမှုနာ အပလီကေးရှင်းအား အသုံးပြုကြည့်ခြင်း

အပလီကေးရှင်း ကို စတင်ကြည့်ပါမည်။ အောက်ပါအတိုင်း ဒေါင်းလုဒ်လုပ်ထားသည့် နေရာတွင် cmp ဖြင့် ဖွင့်ကြည့်ပြီး java -jar happy-hacking.jar ဟု ရိုက်ကြည့်ပါမည်။


အောက်ပါအတိုင်း အပလီဝင်းဒိုးကိုထွက်ပေါ်လာသည်ကို တွေ့ရပါမည်။ ဘယ်ဘက်ရှိ Freeq Analyser ခလုပ်ကို နှိပ်ပါက အောက်ပါအတိုင်း တွေ့မြင်ရမည် ဖြစ်သည်။



၂။ လိုအပ်သော ဖိုင်များအား လုဒ်လုပ်ယူခြင်း

ဤနမှုနာအတွင်းတွင်စကားဝှက် ကို အဖြေထုတ်ရန် ဖိုင် (love-letter.txt) နှင့်ပုံမှန်စာ ဖြစ်သော အင်္ဂလိပ်စာ
ဝတ္တုတိုတစ်ခုကို (essay.txt) ကို လုဒ်လုပ်ပါမည်။ စကားဝှက် ဖိုင်အား Load Source ခလုပ်ဖြင့်၊ သာမန်စာ အား Load Formal ခလုပ်ဖြင့် လုဒ် လုပ်နိုင်ပါသည်။

Load Source

Load Formal
၃။ စကားဝှက်အား အဖြေထုတ်ခြင်း

ဦးစွာ Load Source ဖြင့် ခေါ်ယူထားသော မှုရင်းစာကို Source Tab တွင် လေ့လာကြည့်ပါမည်။ အောက်ပါအတိုင်း ခုနှစ်များ၊ နံပါတ်များမှာအစီအစဉ် အလိုက်ရှိကြောင်းကို တွေ့ရပါသည်။ တဖန်ကော်မာများ၊ ဖူးစတော့များ ကိုလည်းစာကြောင်းအဆုံးတွင် တွေ့ရ၏။


စကရိုးအား ဆွဲ၍ အောက်ဖက်ကို ဆက်ကြည့်သောအခါ အောက်ပါအတိုင်း z မှစသော နံပါတ်များကို တွေ့ရပြီး၊ a, b, c ၏ ပြောင်းပြန်အတိုင်း ဖြစ်နေသည်ကို တွေ့ရ၏။ ဤအချက်သည်ကြီးမားသော အဖြေတစ်ခုဖြစ်၏။


ပြီးလျှင် အပေါ်ဘက်မှ Crypt ခလုပ်ကို နှိပ်ပြီး စာလုံးများကို ပြောင်းသော စာမှတ်နှာဘက်ကို သွားပါမည်။ ပြီးပါက အောက်ပါအတိုင်း set နေရာတွင် သင့်တော်သည့်စာလုံးများအားဖြည့်စွက်ပြီး ပုဒ်စာ အားဖြေရှင်းသွားပါမည်။


အထက်ပါပုံတွင် တွေ့ရှိခဲ့သော ဟင့် အတိုင်း a - z မှ z - a ကိုဖြည့်စွက်ပါမည်။ ပြီးလျှင် အောက်တွင်ရှည်သော Crypt ခလုပ်အသေးကို နှိပ်ပါက အဖြေကို အောက်တွင် ဖော်ပြပေးနိုင်မည် ဖြစ်သည်။


အဖြေမှာ GNU free documentation license ဖြစ်နေပါတော့သည်။

ရေးသားထားသော နမှုနာ အပလီကေးရှင်း ကို ဤနေရာတွင် ဒေါင်းလုဒ်လုပ်ယူနိုင်ပါသည်။
အသုံးပြုထားသော ကုဒ်များကိုမှု https://github.com/minlwin/mmju/tree/master/happy-hacking တွင် လေ့လာနိုင်ပါသည်။

လေးစားစွာဖြင့်
မင်းလွင်

February 23, 2012

ထူးဆန်းသော ဝှက်စာတစ်စောင်

ပြီးခဲ့သော အခန်း XOR Algorithm ဖြင့် Cool Crypto စကားဝှက်ဆော့ဖ်ဝဲ၏ Algorithm ကို လေ့လာခဲ့ပါသည်။ ဤတစ်ခေါက်တွင်လည်း ဆက်လက်၍ Puzzles for Hackers ၏ ပုဒ်စာတစ်ခုဖြစ်သော Gil Bates နှင့် Cool Crypto ဆိုသည့် အခန်းကို ပြန်လည် ကောက်နှုတ်တင်ပြပါဦးမည်။ ပုဒ်စာအကြောင်းကို မသွားသေးခင် Algorithm ဆိုသည်မှာ အဘယ်အရာကို ခေါ်သည်ဆိုသည်ကို လေ့လာပါဦးမည်။

Algorithm

Algorithm ဆိုသည်မှာ၊ သင်္ချာဘာသာရပ်နှင့် ကွန်ပျူတာသိပ္ပံဘာသာရပ်များတွင် ပုဒ်စာတစ်ခုကို ထိရောက်စွာ ဖြေရှင်းနိုင်သည့်နည်းလမ်းကို စနစ်ချသတ်မှတ်ထားသော ဥပဒေသဟု အဓိပ္ပါယ်ရပါသည်။ ထိရောက်သော တွက်ချက်နည်းဟုလည်း ခေါ်ဆိုနိုင်မည် ဖြစ်သည်။ ကွန်ပျူတာဘာသာရပ်တွင် Algorithm ဖြင့် သတ်မှတ်ထားသောနည်းလမ်းများကို လက်တွေ့ ကုဒ်များဖြင့် ချရေးထားသော အစီအစဉ်များကို ပရိုဂရမ်ဟု ခေါ်ဆိုပါသည်။

Algorithm ၏ အစသည် ခရစ်တော်မပေါ်ခင် နှစ်ပေါင်း ၃၀၀ကျော်ခန့်မှစတင်ခဲ့ပါသည်။ ဂရိ သင်္ချာနှင့် ဂျီသြမေတြီ ပညာရှင် တစ်ဦးဖြစ်သော Euclid of Alexandria ရေးသားခဲ့သည့် Euclid's Element သည် Algorithm ၏ အစပင်ဖြစ်၏။ အဓိကအားဖြင့် သဘာဝကိန်းနှစ်ခု၏ အကြီးမားဆုံး ဘုံခွဲကိန်းကို (Greatest Common Divisor) ရှာဖွေရာတွင် အသုံးပြုနိုင်သော Euclidean algorithm သည် လက်ရှိ Algorithm များ၏ မှုရင်းဟု ခေါ်ဆိုနိုင်လောက်ပေသည်။

Algorithm ဟူသောအမည်မှာ ၉ရာစုနှစ်ပိုင်းတွင် ကျော်ကြားခဲ့သော လက်ရှိ အီရပ်နိုင်ငံ ဘက်ဂဒက်မြို့ရှိ သင်္ချာပညာရှင်ကြီး al-Khwarizmi ၏ အမည်မှ ဆင်းသက်လာပါသည်။ ခရစ်တော်ပေါ်ပြီး ၈၂၅ခုနှစ်တွင် al-Khwarizmiက ရေးသားခဲ့သော "အိန္ဒိယသင်္ချာကြမ်း" သည် ၁၂ရာစုအရောက်တွင် လက်တင်ဘာသာသို့ "Algoritmi de numero Indorum" အမည်ဖြင့် ဘာသာပြန်ခဲ့ပြီး၊ နှစ်ပေါင်း ၅၀၀ကျော်တိုင်အောင် ဥရောပနှင်ငံများ၏ တက္ကသိုလ်များတွင် သင်္ချာဘာသာရပ်၏ အခြေခံပြဋ္ဌာန်းစာအုပ်အနေဖြင့် အသုံးပြုခဲ့ကြပါသည်။ Algorithm မှာ ထိုကြမ်းစာ၏ ခေါင်းစဉ်ဖြစ်သော Algoritmi မှ ဆင်းသက်လာခဲ့ပါသည်။


ဖြေရှင်းရန် ပုဒ်စာ

Algorithm ဆိုသည့်စကားလုံး၏ အဓိပ္ပါယ်ကို ရှင်းလင်းပြီးသည့်နောက်တွင် လက်ရှိ ရေးသားရန်ဖြစ်သော ပုဒ်စာဘက်ကို ဆက်ပါဦးမည်။

Gil Bates နှင့် Cool Crypto

ဆော့ဖ်ဝဲလောကတွင် အလွန်ချမ်းသာကြွယ်ဝသော သူကြွယ်ကြီးတစ်ဦးရှိပြီး၊ ဤစာအုပ်ထဲတွင် Gil Bates ဟု ခေါ်ဆိုအသုံးပြုပါမည်။ သူသည် သူ၏ သက်တမ်းတစ်လျှောက်လုံးတွင် ဟက်ကာများကြောင့် အတော်လေးပင် ဦးနှောက်စားနေခဲ့ရပါသည်။ သူ၏ ကုမ္ပဏီမှထုတ်လုပ်သော ဆော့ဖ်ဝဲများအား ဖျက်ပြီး အသုံးပြုသူ အချို့ရှိကြပေမယ့် အတော်များများမှာမူ စိတ်မပျက်ပဲ တောက်လျှောက် အားပေးလာခဲ့ကြ၏။ ရန်ဖန်ရံခါ ကုမ္ပဏီအတွင်းရှိ ကွန်ပျူတာများကို တိုက်ခိုက်ပြီး၊ Gil က ပင်ပမ်းတကြီး လူအား ငွေအားတို့ဖြင့် ကြိုးစား အားထုတ်၍ လက်ဝယ်ရရှိထားသော ဆော့ဖ်ဝဲများ၏ လျှို့ဝှက်ချက်များကို ခိုးထုတ်ရန် ကြံစီမှု့များပင် ရှိခဲ့ကြ၏။

Gil သည် ဤအတိုင်း လက်ပိုက်ကြည့်မနေနိုင်တော့ပါ။ သူ၏ အဖိုးတန် အချက်အလက်များကို ကာကွယ်ရန် နည်းလမ်းများကို ရှာဖွေပါတော့သည်။ သူ၏ ဆုံးဖြတ်ချက်မှာ စကားဝှက်ဆော့ဖ်ဝဲတစ်ခုကို ဝယ်သုံးရန်ဖြစ်သည်။ (ဘာကြောင့် ၎င်း၏ ထူးချွံသောဝန်ထမ်းများကို တာဝန်မပေးသလဲ ဆိုသည်ကို ကျွှန်တော့်အား မမေးစေချင်ပါ။ အလွန်ကောင်းမွန်သော ၎င်း၏ OS P**** 2005 ၏ ဗားရှင်းအသစ်ကို ထုတ်လုပ်ရန် အလုပ်ရှုပ်နေသောကြောင့် ဖြစ်ပါလိမ့်မည်။ )

Gil သည် အစဉ်အမြဲဆိုသလို အထူးချွံဆုံးနှင့်၊ ဈေးအကြီးဆုံးကိုသာ ရွေးချယ်လေ့ရှိသောကြောင့် ၎င်း၏ အဖိုးတန်လှသော လျှို့ဝှက်ချက်ကို ကာကွယ်ရန် Cool Crypto (1.1.1) ကို ဝယ်ယူခဲ့ပါသည်။ စကားဝှက်ပရိုဂရမ်မှာ ဈေးအကြီးဆုံးရောင်းချနေပြီး၊ အကြီးအကျယ် ကြော်ညာထားသောကြောင့်၊ ၎င်း၏ အဖိုးတန် လျှို့ဝှက်ချက်မှာ စိတ်ပူစရာ မလိုတော့ပေ။ အကယ်၍ ဟက်ကာက ဆာဗာအတွင်းမှ ဖိုင်ကိုခိုးယူသွားရင် တောင်မှ၊ အဖိုးတန် စကားဝှက်ပရိုဂရမ်ကို အသုံးပြု၍ ဖတ်မရအောင် ပြောင်းလည်းထားပြီး ဖြစ်သောကြောင့် လျှို့ဝှက်ချက်မှာ ပေါက်ကြားစရာမရှိဟု Gil က စိတ်ချနေခဲ့၏။ အဘယ်ကြောင့်ဆိုသော လျှို့ဝှက်စာတွင်အသုံးပြုခဲ့သော လျှို့ဝှက်ကီးမှာ သူ၏ ခေါင်းထဲတွင်သာ ရှိသောကြောင့် ဖြစ်ပါသည်။

၄လပိုင်း ၁ရက်နေ့ည၊ Smithnik သည် Gil ၏ ကုမ္ပဏီ ဆာဗာဆီသို့ ထိုးဖောက်ဝင်ရောက်ခဲ့ပါသည်။ Gil သည် Cool Crypto ကို ဝယ်ယူထားသည်ကို သိထားသောကြောင့် ကြိုတင်ပြင်ဆင်မှု့များလည်း ပြုလုပ်ထားခဲ့ပါသည်။ သို့ရာတွင်၊ ဆာဗာအတွင်းနှင့် စကားဝှက်ပရိုဂရမ်ကို အသုံးပြုထားသော ဝှက်စာမှာ တစ်ခုတည်းသာရှိပြီး အမည်မှာ "The Conscience of a Hacker.txt" ဖြစ်ပေသည်။


အထက်ဖော်ပြပါ ပုံမှာ Gil ၏ ဝှက်စာဖိုင်၏ တစ်စိတ်တစ်ပိုင်ဖြစ်ပြီး၊ စာအပြည့်အစုံအား ဤနေရာတွင် ဒေါင်းလုဒ် လုပ်ယူနိုင်ပါသည်။ ဤတစ်ခေါက် ဖြေရှင်းရန် ပုဒ်စာမှာ ပြီးခဲ့သော ဘလောဂ်တွင် ဖော်ပြခဲ့သော XOR Algorithm ကို အသုံးပြု၍ Gil ၏ ဝှက်စာကို မှုရင်းသို့ပြောင်းပါ။


ဖြေရှင်းချက်

ဒီတစ်ခေါက်က ယခင်တစ်ခေါက်နဲ့ ဆင်သလိုလိုနဲ့ နည်းနည်းကွဲခြားပါတယ်။ XOR သုံးတာခြင်းတော့ တူပါတယ်။ ဒါပေမယ့် ယခင်တစ်ခေါက်က ပြောင်းရမယ့် မှုရင်းစာရယ်၊ ပြောင်းထားပြီးဖြစ်သော ရလဒ်ကို သိရှိထားပါတယ်။ ဒီတစ်ခေါက်ကတော့ ပြောင်းထားပြီးသော ရလဒ်ကို ပေးထားပြီး၊ မှုရင်းစာကို ပြန်ဖြေဖို့လိုတဲ့ ပုဒ်စာတစ်ခုဖြစ်ပါတယ်။

ဒါပေမယ့် သိပ်တော့ ပြဿနာမရှိပါဘူး။ ကျွှန်တော်တို့ ဒီနေရာမှာ CoolCrypto ကို သုံးတယ် ဆိုတာ သိထားတဲ့ အတွက် XOR ကို သုံးရမယ်ဆိုတာကို အတိအကျသိပါတယ်။ တဖန် အင်္ဂလိပ်စာမှာအသုံးများတဲ့ are the that which I အစရှိတဲ့ စာလုံးတွေကို ကီးအနေနဲ့ အသုံးပြုနိုင်ပါတယ်။ ဒိအပြင် ကျွှန်တော်တို့အတွက် ဖိုင်အမည် ဆိုတဲ့ ကြီးမားသော ဟင့် တစ်ခု ရှိပါသေးတယ်။ တော်ရုံ Text ဖိုင်တွေထဲမှာ ဖိုင်အမည်ကို ရေးထားလေ့ရှိတာကို တွေ့ရပါတယ်။

ဦးစွာ ယခင်တစ်ခေါက်ရေးထားတဲ့ လော့ဂျစ်ဟာ ဖိုင်ကိုသုံးလို့မရတဲ့အတွက် ဖိုင်ကိုသုံးလို့ရတဲ့ ကလပ်စ် တစ်ခုကိုပြောင်းရေးကြည့်ပါမယ်။
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;

public class CoolCrypter {

 public static void main(String[] args) {
  if (args.length != 2)
   System.err.println("Please set path and key!");
  try {
   new CoolCrypter().crypt(Paths.get(args[0]), args[1]);
  } catch (IOException e) {
   System.err.println("IOException");
  }
 }

 public void crypt(Path path, String key) throws IOException {
  byte[] input = Files.readAllBytes(path);
  byte[] result = new byte[input.length];
  byte[] keys = key.getBytes();
  int count = 0;

  for (int i = 0; i < input.length; i++) {
   if (count >= keys.length) {
    count = 0;
   }
   byte c = input[i];
   c ^= keys[count];
   result[i] = c;
   count++;
  }
  String newFile = path.toString() + "upd.txt";
  Files.write(Paths.get(newFile), result, StandardOpenOption.CREATE,
    StandardOpenOption.TRUNCATE_EXISTING);
 }

}
ပြီးလျှင် ဖိုင်အမည် ဖြစ်တဲ့ The Consciencd of a Hacker" ကို ကီးအနေနဲ့ အသုံးပြုပြီး၊ အဲ့ဒီဖိုင်ကို ဖြေကြည့်ပါမယ်။


ပဋ္ဌမ Argument ကို ဖိုင်နေရာ၊ ပြီးတော့ ကီးကို ဖိုင်အမည်နဲ့ပြန်သုံးပြီး စကားဝှက်ကို ဖြေခိုင်ကြည့်ပါတယ်။


ကံကောင်းထောက်မစွာပင်၊ ထိပ်ဆုံးနေရာတွင် ကီးနဲ့တူသောအရာကို ရှာဖွေ တွေ့ရှိပါတယ်။ ရရှိတဲ့ ကီးဖြစ်တဲ့ "1981" ကို ကီးအနေနဲ့ ပြန်ပြီးရှင်းကြည့်ပါတယ်။ အောက်ပါအတိုင်း အဖြေထွက်လာတာကို တွေ့ရပါတယ်။ လားလား၊ The Mentor ၏ နာမည်ကြီး "Hacker Manifesto" ကို စကားဝှက်လုပ်ထားခြင်းပါလား။

The Conscience of a Hacker

                                      by

                               +++The Mentor+++

                          Written on January 8, 1986
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

        Another one got caught today, it's all over the papers.  "Teenager
Arrested in Computer Crime Scandal", "Hacker Arrested after Bank Tampering"...
        Damn kids.  They're all alike.

        But did you, in your three-piece psychology and 1950's technobrain,
ever take a look behind the eyes of the hacker?  Did you ever wonder what
made him tick, what forces shaped him, what may have molded him?
        I am a hacker, enter my world...
        Mine is a world that begins with school... I'm smarter than most of
the other kids, this crap they teach us bores me...
        Damn underachiever.  They're all alike.

        I'm in junior high or high school.  I've listened to teachers explain
for the fifteenth time how to reduce a fraction.  I understand it.  "No, Ms.
Smith, I didn't show my work.  I did it in my head..."
        Damn kid.  Probably copied it.  They're all alike.

        I made a discovery today.  I found a computer.  Wait a second, this is
cool.  It does what I want it to.  If it makes a mistake, it's because I
screwed it up.  Not because it doesn't like me...
                Or feels threatened by me...
                Or thinks I'm a smart ass...
                Or doesn't like teaching and shouldn't be here...
        Damn kid.  All he does is play games.  They're all alike.

        And then it happened... a door opened to a world... rushing through
the phone line like heroin through an addict's veins, an electronic pulse is
sent out, a refuge from the day-to-day incompetencies is sought... a board is
found.
        "This is it... this is where I belong..."
        I know everyone here... even if I've never met them, never talked to
them, may never hear from them again... I know you all...
        Damn kid.  Tying up the phone line again.  They're all alike...

        You bet your ass we're all alike... we've been spoon-fed baby food at
school when we hungered for steak... the bits of meat that you did let slip
through were pre-chewed and tasteless.  We've been dominated by sadists, or
ignored by the apathetic.  The few that had something to teach found us will-
ing pupils, but those few are like drops of water in the desert.

        This is our world now... the world of the electron and the switch, the
beauty of the baud.  We make use of a service already existing without paying
for what could be dirt-cheap if it wasn't run by profiteering gluttons, and
you call us criminals.  We explore... and you call us criminals.  We seek
after knowledge... and you call us criminals.  We exist without skin color,
without nationality, without religious bias... and you call us criminals.
You build atomic bombs, you wage wars, you murder, cheat, and lie to us
and try to make us believe it's for our own good, yet we're the criminals.

        Yes, I am a criminal.  My crime is that of curiosity.  My crime is
that of judging people by what they say and think, not what they look like.
My crime is that of outsmarting you, something that you will never forgive me
for.

        I am a hacker, and this is my manifesto.  You may stop this individual,
but you can't stop us all... after all, we're all alike.

Gil Bates ရဲ့ Hacker တွေကို ပျက်ရယ်ပြုလိုတဲ့ စိတ်ကို တွေးမိ၍ ပြုံးမိပါတော့တယ်။

ကိုးကား
http://books.google.co.jp/books?id=JqdqQgAACAAJ&dq=puzzles%20for%20hackers&hl=ja&source=gbs_similarbooks
http://www.phrack.org/issues.html?issue=7&id=3&mode=txt

လေးစားစွာဖြင့်
မင်းလွင်

February 18, 2012

XOR အလဂိုလီဇင်

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

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

Gmail login စာမျက်နှာကို ဖွင့်ပါတဲ့။ ပြီးရင် ညာဘက်ကလစ်ကိုနှိပ်ပြီး View Source ကို သွားပါတဲ့။ ပြီးရင် Ctl + a နဲ့ Ctl + c ကို နှိပ်ပါတဲ့။ ပြီးတော့ memo ကို ဖွင့်ပြီး Ctl + p လုပ်ပါတဲ့။ သြော်ရှည်လိုက်တာ။ အဲ့ဒီစာမျက်နှာကို ဒီအတိုင်း Save လုပ်ပြီး Text Editor တစ်ခုနဲ့ဖွင့်ရင် ပြီးတာပဲဟာလို့ တွေးမိပါသည်။ Short Cut တွေသုံးပြီး အလွန်တော်ကြောင်း ကြွားလိုပုံရပါသည်။

ကျန်တာတွေကတော့ သိပ်ပြီး စိတ်ဝင်စားစရာမကောင်းပါ။ Form ရဲ့ action မှာ သူသွားစေလိုတဲ့ PHP Url ကို ဖြည့်ခိုင်းပါတယ်။ ပြီးတော့ အဲ့ဒီ PHP ထဲမှာ Request ထဲမှာပါတဲ့ ပါရာမီတာထဲက account နဲ့ password ကို text ဖိုင်တစ်ခုမှာ ရေးခိုင်းပါတယ်။ အဲ့ဒီလိုပြင်ပြီးတဲ့ HTML ဖိုင်ကို ဆာဗာတစ်ခုမှာတင်ပြီး သူငယ်ချင်းတစ်ယောက်ယောက်ကို log in လုပ်ခိုင်းပါတဲ့။ အဲ့ဒီစာမျက်နှာမှာ Log in လုပ်ရင်တော့ Account နဲ့ Password ရပြီတဲ့။ ဘယ်လောက် စိတ်ပျက်စရာကောင်းသလဲ။

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


ဟက်ကင်းဆိုသည်မှာ

ဟက်ကင်း၏ အစသည် ဤကဲ့သို့ ရုပ်မဆိုးပါ။ မဟုတ်ပါ။ ရုတ်မဆိုးရုံတင်မက အလွန် လှပပါသည်။ သိမ်မွေ့ပါသည်။ နူးညံ့ပြီး နက်နဲ လှပါသည်။ ဟက်ကာဆိုသည့်စကားလုံးကိုစတင် ခဲ့ကြသည်မှာ လွန်ခဲ့သော နှစ်ပေါင်း ၆၀ ကျော်ကတည်းက ဖြစ်၏။ ၁၉၅၀ခုနှစ်နှောင်းပိုင်းတွင်ဖြစ်၏။ MIT ၏ မီးရထား သံလမ်း ဝါသနာပါသူများအသင်းသည် သံလမ်း ပစ္စည်းအဟောင်းများကို အလှူအဖြစ်လက်ခံ ရရှိခဲ့၏။ ထိုပစ္စည်းအဟောင်းများ၏ အများစုမှာ သုံးမရအောင် ပျက်စီးနေသော တယ်လီဖုန်း အစုတ်များ ဖြစ်ကြ၏။ ထိုစဉ် သံလမ်းကလပ် အဖွဲ့ဝင် ကျောင်းသားများက တယ်လီဖုန်းအစုတ်များကို အသုံးပြု၍ အော်ပရေတာမှ တယ်လီဖုန်း နံပါတ်များကို လှည့်ခြင်းအားဖြင့် သံလမ်းပေါ်ရှိ ရထားများကို မှန်ကန်စွာ လမ်းကြောင်းပေးနိုင်သည့် စစ္စတမ်တစ်ခုကို တီထွင်ခဲ့ကြ၏။ ဤကဲ့သို့ တယ်လီဖုန်းကို အသုံးပြု၍ ဖုန်းဆက်ခြင်းနဲ့ မပတ်သက်သော လုပ်ငန်းတစ်ခုကို လုပ်ဆောင်နိုင်ခြင်းကို ဟက်ကင်းဟု ခေါ်ဆိုခဲ့ကြ၏။

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

ကုဒ်ရေးခြင်း၏ အနုပညာထက် မည်သို့ခိုးမည်၊ မည်သို့လိမ်မည် အစရှိသည့်နည်းပညာများက ဟက်ကင်းနည်းပညာများ အဖြစ် လူသိများလာကြ၏။ ခိုးနည်းများကို ရေးထားသည်မှာ ဘာပဲပြောပြော စစ္စတမ်၏ အားနည်းချက်များကို ဖော်ပြထားလေ့ရှိပြီး မည်ကဲ့သို့ ထိုးဖောက်နိုင်မည်ကို ဖော်ပြထားလေ့ရှိသောကြောင့် ဘာပဲပြောပြော လေ့လာစရာရှိ ပါဦးမည်။ သို့ရာတွင် လိမ်နည်းများကတော့ စိတ်ပျက်စရာကောင်းပါသည်။ လိမ်နည်းများကို ဘယ်လိုနည်းနဲ့မှ ဟက်ကင်းဟု လက်ခံ၍မရပါ။ သို့ရာတွင် အများက လိမ်နည်းခိုးနည်းများကို ဟက်ကင်းဟု ခေါ်ဆိုနေကြပါသောကြောင့် လက်ရှိ လိမ်နည်းခိုးနည်းများလည်း ဟက်ကင်းနည်းပညာများ ဖြစ်နေကြပါသည်။

ဘာလို့ ဒီနေရာမှာ ဒီလောက် ဟက်ကင်း အကြောင်း လာပြောနေရသလဲ ဆိုတော့ Happy Hacking ဟု ခေါင်းစဉ်တပ်မိသောကြောင့် ဖြစ်၏။ ကျွှန်တော်သည် ဤနေရာတွင် လက်ရှိ လူသိများနေသော ဟက်ကင်းနည်းများဖြစ်ကြသော လိမ်နည်း ခိုးနည်းများကို ရေးသားမည်မဟုတ်။ Java ကုဒ်များကို လှပသေသပ်စွာ ရေးသားနိုင်ရန် ရည်ရွယ်၍ Puzzles For Hackers ထဲမှ သင်ခန်းစာများကို လေ့လာရင်း စဉ်းစားပုံ အလဂိုလီဇင်များကို လက်လှမ်းမှီသလို Java ဖြင့်မည်သို့ရေးသားမည် ဆိုသည်ကို ရေးသားသွားမည် ဖြစ်ပါသည်။


XOR အလဂိုလီဇင် နှင့် စကားဝှက်ပညာ

အောက်ပါ ပုဒ်စာသည် Puzzles For Hackers (ဂျပန်ဘာသာပြန်) ၏ Cool Crypto ဆိုသည့် အခန်းမှ ကောက်နှုတ်ထားပါသည်။

Cool Crypto

ဟက်ကာ Calvin Smithnik သည် Anti Creature ၏ စကားဝှက်ပရိုဂရမ်အသစ်တစ်ခုဖြစ်သော Cool Crypto ၏ နမှုနာဗားရှင်းအား ဒေါင်းလုဒ်လုပ်လာခဲ့၏။ Smithnik သည် ဤကဲ့သို့သော ဆော့ဖ်ဝဲများကို လွန်စွာစိတ်ဝင်စားလေ့ရှိသည်။ ဘာကြောင့်ဆိုသော် စကားဝှက်ပညာသည် သူ၏လုပ်ငန်းအတွက် လွန်စွာအသုံးဝင်သောကြောင့် ဖြစ်၏။ Cool Crypto ဖြင့် ပုံစံပြောင်းထားသော ဖိုင်များအား မကြာမကြာ တွေ့ရှိလေ့ရှိသောကြောင့် Cool Crypto ၏ အလဂိုလီဇင်ကို သိရှိပါက လျှို့ဝှက်ချက်များကို ဖော်ထုတ်ရာတွင် လွယ်ကူစေသောကြောင့် ဖြစ်၏။ Anti Creature သည် Cool Crypto အား "ဒေါ်လာ ၁၀၀တန် Full Version ခြင်းအားဖြင့်၊ သင်၏ အဖိုးတန် အချက်အလက်များကို အန္တရယ်ရှိသော ဟက်ကာများမှ ၁၀၀ရာနှုန်း ကာကွယ်နိုင်ပါသည်" ဟု ကြော်ညာထား၏။

နမှုနာဗားရှင်းသည် Full Version နှင့်စာလျှင် အသုံးပြုပုံ အတော်များများကို အားလျှော့ထားပါသည်။ ဥပမာအားဖြင့် နမှုနာဗာရှင်းတွင် လျှို့ဝှက်ရာတွင် အသုံးပြုသည့် ကီးအား သတ်မှတ်၍မရပေ။ Smithnik သည် Cool Crypto ၏ Input Field တွင် "creature_creature_creature" ဟု ဖြည့်စွက်ပြီး Crypt ခလုပ်ကို နှိပ်လိုက်ပါသည်။

"]VTYJQC]aGC]_PDJ[{RJ[EEMLA"ဟု ပြောင်းပေးသည်ကို တွေ့ရ၏။ တဖန် သူ၏ အမည်ဖြစ်သော smith ကို စကားဝှက်ပြောင်းကြည့်ပါသည်။ အဖြေကို ကြည့်သောအခါ Smithnik သည် Cool Crypto ၏ စကားဝှက်တွင် အသုံးပြုနေသော အလဂိုလီဇင်ကို သဘောပေါက်သွားပါတော့သည်။

Cool Crypto တွင် အသုံးပြုနေသော အလဂိုလီဇင်မှာ အဘယ်နည်း။ တဖန် smith ကို ပြောင်းကြည့်သော အခါ ရရှိသော ရလဒ်မှာ အဘယ်နည်း။


XOR အလဂိုလီဇင်

စကားဝှက်နှင့် မှုရင်းစာလုံး၏ အရေအတွက်မှာ အတူတူဖြစ်ခြင်းကိုကြည့်၍ Smithnik သည် ဤ စကားဝှက်အား ဖော်ထုတ်နိုင်လိမ့်မည်ဟု ယုံကြည်ခဲ့သည် ဟုဆို၏။ ဤ Cool Crypto တွင် အသုံးပြုထားသည်မှာ ရိုးရှင်းသော XOR အလဂိုလီဇင်ပင်ဖြစ်၏။

ABA XOR B
000
011
101
110

ဥပမာအားဖြင့် အင်္ဂလိပ်စာလုံး A သည် ASCII ဖြင့် 41H ဖြစ်ပြီး ဘိုင်နရီ 01000001 ဖြစ်၏။ တဖန် အင်္ဂလိပ်စာလုံး l သည် ASCII 31H ဖြစ်ပြီး ဘိုင်နရီ 01101100 ဖြစ်၏။ A XOR l သည် ဘိုင်နရီ 1110000 ဖြစ်ပါသဖြင့် ASCII စာလုံး p ဖြစ်ပါသည်။

A= 01000001
l= 01101100
A ^ l= 11100000

တဖန် Smithnik သည် ဤ XOR အလဂိုလီဇင်၏ ထူးခြားချက်တစ်ခုကိုလည်း တွေးတောမိပါသည်။ ဤသည်မှာ အောက်ပါအတိုင်းဖြစ်၏။

X XOR key = Y
Y XOR key = X
X XOR Y = key

စာကားလုံးတစ်ခုကို ကီးကိုအသုံးပြု၍ စကားဝှက်ကို ပြုလုပ်ထားသည်။ စာကားလုံးနှင့် စာကားဝှက် အဖြေကို သိပြီဆိုလျှင် ကီးကိုရှာ၍ ရပြီဖြစ်သည်။ နမှုနာထဲတွင် C ပရိုဂရမ်မင်းကို အသုံးပြု၍ ဖော်ပြထားသော်လည်း ဤနေရာတွင် Java ကို အသုံးပြု၍ ပုဒ်စာကို ဖြေရှင်းကြည့်ပါမည်။


ကီးကိုရှာဖွေခြင်း

public class CoolCrypto {
 
 public static void main(String[] args) {

  String key = "]VTYJQC]aGC]_PDJ[{RJ[EEMLA";
  String input = "creature_creature_creature";
  
  if(args.length == 2) {
   key = args[0];
   input = args[1];
  }
  
  System.out.println(crypt(key, input));
 }
 
 public static String crypt(String key, String input) {
  StringBuilder sb = new StringBuilder();
  
  int count = 0;
  for(int i=0; i < input.length(); i++) {
   if(count >= key.length()) {
    count = 0;
   }
   char c = input.charAt(i);
   c^= key.charAt(count);
   sb.append(c);
   count ++;
  }

  return sb.toString();
 }
}


ဤပရိုဂရမ်တွင် အဓိက XOR ကို ပြောင်းပေးနေသည်မှာ စာကြောင်း ၂၅ဖြစ်၏။ input ၏ စာလုံးတစ်လုံးခြင်းအား key ၏ စာလုံးတစ်လုံးခြင်းဖြင့် xor လုပ်ပြီး စာကားဝှက်ကို ပြုလုပ်နေခြင်းဖြစ်သည်။ တဖန် ဤပရိုဂရမ်ဖြင့် ကီးကိုရှာဖွေရန် ကီးနေရာတွင် စာကြောင်း နံပါတ် ၅ ဖြင့် ရလဒ်ကိုသတ်မှတ်ပြီး၊ မှုရင်းစာလုံးနေရာတွင် စာကြောင်း ၆ ဖြင့် Smithnik ကအသုံးပြုခဲ့သော မှုရင်းစာလုံးကို အသုံးပြုပါသည်။ တဖန် ဤပရိုဂရမ်အား ပါရာမီတာမပါပဲ အလုပ်လုပ်ကြည့်ပါက အောက်ပါအတိုင်း အဖြေထွက်မည် ဖြစ်သည်။

>$18>$18>$18>$18>$18>$18>$

အဖြေကိုကြည့်ခြင်းအားဖြင့် Cool Crypto ၏ ကီးစာလုံးသည် >$18 ဖြစ်သည်ကို သိရှိနိုင်ပါသည်။ ပြီးလျှင် ကျွှန်တော်တို့ ရရှိသောကီးဖြင့် smith ကိုစကားဝှက်လုပ်ကြည့်ပါမည်။

MIXLV

ဆက်လက်၍ လေ့လာသွားပါဦးမည်။
Source ကုဒ်များကို https://github.com/minlwin/mmju/tree/master/happy-hacking တွင် တင်ထားပါသည်။

ကိုးကား
http://www.amazon.co.jp/gp/product/images/479811135X/ref=dp_image_0?ie=UTF8&n=465392&s=books



လေးစားစွာဖြင့်
မင်းလွင်

February 3, 2012

Cryptology နှင့် အလဂိုလီဇင်

စကားဝှက်ပညာ

Cryptology ဆိုသည်မှာ Kryptos နှင့် Logos ဆိုသည့် ဂရိဘာသာရပ်မှ ဆင်းသက်လာပါသည်။ Kryptos ဆိုသည်မှာ လျှို့ဝှက်ခြင်းဟု အဓိပ္ပါယ်ရပြီး၊ logos ဆိုသည်မှာ သိပ္ပံပညာဟု အဓိပ္ပါယ်ရပါသည်။ ဆိုရမည် ဆိုလျှင် လျှို့ဝှက်ခြင်း သိပ္ပံပညာဟု အမည်ရမည်ဖြစ်ပါသည်။ လျှို့ဝှက်ခြင်းပညာရပ်တွင် ဝှက်ခြင်းနည်းပညာနှင့်၊ အဖြေထုတ်ခြင်းနည်းပညာတို့ရှိကြ၏။

လူတစ်ယောက်သည်၊ အကြောင်းအရာတစ်ခုကို အခြားတစ်ယောက်ယောက်အား လျှို့ဝှက်စွာ ပြောကြားလိုပါက၊ ထိုသူ တစ်ယောက်တည်းသာ သိနိုင်သော ဘာသာရပ်ဖြင့် အကြောင်းကြားရန် လိုအပ်ပေသည်။ ထို့အတွက် အကြောင်းကြားလိုသည့်အရာကို စကားဝှက်ဖြင့် ပြောကြားပေလိမ့်မည်။ သို့ရာတွင် ထိုစကားဝှက်အား သိစေလိုသူက နားမလည်ပါက အဓိပ္ပါယ်ရှိမည် မဟုတ်ပါ။

ဆိုရမည်ဆိုလျှင် စကားဝှက်သည် မိမိတစ်ယောက်တည်း သိ၍အဓိပ္ပါယ်ရှိမည်မဟုတ်။ အကြောင်းကြား လိုသူအား အခြားသော သူများမသိစေပဲ အကြောင်းကြားနိုင်မှသာ အသုံးဝင်သော စာကားဝှက် ပညာတစ်ခု ဖြစ်လာလိမ့်မည် ဖြစ်သည်။

ကျွှန်တော်တို့ ငယ်ငယ်တုန်းက မကြာခဏ ကြည့်ဘူးမည် ဖြစ်သည့်လူရွှင်တော်များ ပြောဘူးသော ဟာသများကို ပြန်သတိရမိပါသည်။ ပင်လယ်ဓမြ ဟုပြောပြီး၊ ပင်လယ်သည် ကျယ်၍ ဓမြသည် တိုက်သောကြောင့် ကျယ်တိုက်၊ ကြိုက်တယ်ဟု ပြန်ပြောဘူးသည်ကို သတိရမည် ဖြစ်သည်။ အလွန်ကို အဆင့်မြင့်သော စကားဝှက် တစ်မျိုးဖြစ်ပါသည်။

စာကားဝှက်တစ်ခုတွင်၊ စကားဝှက်တစ်ခုနှင့်၊ ဖြေရှင်းရန် ဖြေရှင်းနည်းနှင့် သူ၏ အဖြေဆိုပြီးရှိလေ့ရှိကြ၏။ သိစေလိုသူနှင့် မိမိသာ ဖြေရှင်းနည်းကို ကြိုတင်အကြောင်းကြားထားပြီး၊ စကားဝှက်ဖြင့် အကြောင်းကြားမည် ဆိုပါက၊ ဖြေရှင်းနည်းကို သိရှိထားသူများသာ ပြောကြားလိုသည်များကို သိရှိနိုင်မည်ပေသည်။


စကားဝှက်သည် ဘာကြောင့်လိုအပ်သနည်း

မိမိကအကြောင်းကြားလိုသည့်အရာကို သိစေလိုသူမှအပ မသိရှိစေရန် စကားဝှက်ပညာကို အသုံးပြုလေ့ရှိကြပါသည်။ ဆိုလိုသည်မှာ လူတိုင်းမသိစေလိုသော အကြောင်းအရာတစ်ခုကို အကြောင်းကြားလိုသောအခါ။ တဖက်ကစဉ်းစားကြည့်မည် ဆိုလျှင် လူတိုင်းသိပြီးသောအရာ တစ်ခုကို စကားဝှက်သုံး၍လည်း အဓိပ္ပါယ်ရှိမည် မဟုတ်ပေ။ လူတိုင်းမသိသော အချက်အလက်တစ်ခု၊ တန်ဖိုးရှိသော သတင်းတစ်ခုဟု တွေးလို့ရပါသည်။ အကြောင်းအရာတစ်ခုတွင် တန်ဖိုးဆိုသည်မှာရှိ၏။ တန်ဖိုးကို မည်သို့သတ်မှတ်မည်နည်း။

လူမသိသောသတင်းသည် တန်ဖိုးရှိမည်လော။ စဉ်းစားကြည့်ပါ။ ငါတို့အိမ်နောက်ဖေးက ကိုသော်ဇင်မှာ မိန်းမနှစ်ယောက် ရှိတယ်ဟေ့။ ဆိုကြပါဆို့။ လူတိုင်းမသိပါ။ ဒါဆိုရင် တန်ဖိုးရှိသော သတင်းတစ်ခုလား။ လျှို့ဝှက်စကားနှင့် အကြောင်းကြားစရာ သတင်းတစ်ခုလား။ သတင်းတစ်ခု၏ တန်ဖိုးကို မည်သို့သတ်မှတ်မည်နည်း။ ရှားတိုင်း၊ လူမသိတိုင်း တန်ဖိုးရှိသည်မဟုတ်။

လူတိုင်းလိုချင်၊ သိချင်သော အကြောင်းအရာတစ်ခုကို၊ မည်သူမှ မသိသေးခင် သိရှိခြင်း။ များသောအားဖြင့် ဤအတိုင်း သတ်မှတ်ထားကြ၏။ တန်ဖိုးရှိသော အချက်အလက်များ၏ တန်ဖိုးကို ထိမ်းသိမ်းရန်၊ လုံခြုံစိတ်ချမှု့ ရှိစေရန်၊ လျှို့ဝှက်ခြင်းပညာရပ်ကို အသုံးပြုလေ့ရှိကြ၏။

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

စိတ်မကောင်းစရာ ကောင်းလောက်အောင်ပင် နာမည်ကြီး စစ်ပွဲမျာတွင် စကားဝှက်ပညာ၏ နေရာမှာ အလွန်ကိုနေရာရခဲ့၏။

ကျွှန်တော်လေ့လာလိုသော စကားဝှက်ပညာ

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

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

လျှို့ဝှက်ခြင်းပညာရပ်အား စိတ်ဝင်စားမိသည်မှာ၊ တန်ဖိုးရှိသော အချက်အလက်များအား ကာကွယ်နိုင်သည့်အပြင်၊ လွန်စွာမှ စိတ်ဝင်စားစရာကောင်းသောကြောင့်ဖြစ်၏။ စိတ်ဝင်စားမိသည်မှာ စိတ်ဝင်စားစရာကောင်းသောကြောင့်ဟု ပြောသော်လည်း သိပ်ပြီးအသက်မဝင်လှ။ စောစောက မြန်မာစကားဝှက်ကို ပြန်ဖော်ပြပါမည်။

"ပင်လယ်ဓမြ" = ကြိုက်တယ်

ပင်လယ်သည်ကျယ်၍ ဓမြသည် တိုက်သောကြောင့် ကျယ်တိုက် ကြိုက်တယ် ဖြစ်၏။ မည်မျှစိတ်ဝင်စားစရာကောင်းသနည်း။ ပုဒ်စာတစ်ခုရှိ၍ အဖြေတစ်ခုရှိ၏။ ထိုအဖြေကို ရရှိရန် ဖြေရှင်းသည့်နည်းလမ်းကို ရှာဖွေရန်လိုအပ်ပေသည်။ ထိုပုဒ်စာကို ရေးသားသူမှာ အဆင့်မြင့်လေး ဖြေရှင်းရသည်မှာ ပို၍ စိတ်လှုပ်ရှားဖွယ်ကောင်းပေ ဖြစ်၏။ တနည်းဆိုရသော် ဖြေရှင်းရခက်ခဲလေ၊ အဖြေထုတ်ရသည်မှာ စိတ်လှုပ်ရှားဖွယ်ကောင်းလေ ဖြစ်၏။ ထိုအထဲတွင် ပုဒ်စာဝှက်သူ၏ ဆိုလိုရင်းကို သွားမြင်မိပါက အဖြေထုတ်သူအတွက်မှာ အတိုင်းထက်အလွန်ဖြစ်ပေတော့၏။

ဖြေရှင်းလိုပါသည်။ သို့ရာတွင် ဤနေရာ၌ ကျွှန်တော်မြတ်နိုးသော Java ဖြင့် ဖြေရှင်းနည်း နည်းပညာများကို လေ့လာရင်း ဖော်ပြသွားမည် ဖြစ်ပါသည်။

နောက်အပတ်တွင် လျှို့ဝှက်ပညာရပ်တွင် အသုံးများသော XOR အလဂိုလီဇင်အကြောင်းကို လေ့လာသွားမည်ဖြစ်ပြီး၊ ထိုအကြောင်းများကို Java ဖြင့်ရေးသားကြည့်ပြီး၊ ဖြေရှင်းပုံကိုလည်း Java ဖြင့်စဉ်းစားသွားပါမည်။


လေးစားစွာဖြင့်
မင်းလွင်