စာရင်းသွင်းခြင်းတွင် ဆားထည့်ခြင်း

ထို့ကြောင့်၊ <md5> ဖြင့် hash လုပ်ခြင်းသည် ပြန်လည်ပြုပြင်မရသောလုပ်ငန်းစဉ်ဖြစ်ပြီး hash ကိုရရှိသောဟက်ကာသည် ထို hash မှ စကားဝှက်ကို ရယူနိုင်မည် မဟုတ်ဟု သင်သိပြီးဖြစ်သည်။

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

ဤသည်မှာ လုံလောက်စွာ ရိုးရှင်းပြီး လူကြိုက်များသော စကားဝှက်များအကြောင်းဖြစ်သည်။

ဥပမာ၊ hash 827ccb0eea8a706c4c34a16891f84e7b ကို ရှာဖွေကြည့်ပါ။ Google ရှာဖွေမှုတွင် ချက်ချင်းတွေ့ရမည်မှာ ၎င်းသည် စကားဝှက် <'12345'> ဖြစ်သည်။

ရှုပ်ထွေးသောစကားဝှက်များ၏ hash ကို ဤနည်းဖြင့် ရှာဖွေ၍မရနိုင်ပါ (စမ်းကြည့်ပါ)။

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

စာရင်းသွင်းချိန်တွင် စကားဝှက်ပိုရှည်အောင် တွေးခိုင်းနိုင်သည်။ အနည်းဆုံးစာလုံးအရေအတွက်ကို ဥပမာ၊ <6> သို့မဟုတ် <8> ဖြင့် ကန့်သတ်ခြင်းဖြင့်၊ သို့သော် <'123456'> သို့မဟုတ် <'12345678'> ကဲ့သို့ သော စကားဝှက်များ ပေါ်လာဦးမည်။

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

ဤဖြေရှင်းချက်၏အဓိပ္ပာယ်မှာ စကားဝှက်များကို <ဆားထည့်> ရန်ဖြစ်သည်။ ဆား - ဆိုသည်မှာ အထူးကျပန်းစာကြောင်းတစ်ခုဖြစ်ပြီး စာရင်းသွင်းချိန်တွင် စကားဝှက်သို့ ပေါင်းထည့်မည်ဖြစ်ပြီး hash ကို ရိုးရှင်းသောစကားဝှက် မဟုတ်ဘဲ ဆား+စကားဝှက် စာကြောင်း၊ ဆားထည့်ထားသော စကားဝှက်မှ တွက်ချက်မည်။

ဆိုလိုသည်မှာ စာရင်းသွင်းချိန်တွင် ဤကဲ့သို့ တစ်ခုခုလုပ်မည်။

html<?php
  $salt = '1sJg3hfdf'; // ဆား - ရှုပ်ထွေးသောကျပန်းစာကြောင်း
  $password = md5($salt . $_POST['password']); // စကားဝှက်ကို ဆားထည့်ထားသော hash သို့ပြောင်းလဲခြင်း
?>

ဤအခါတွင် ဆားသည် အသုံးပြုသူတစ်ဦးစီအတွက် ကွဲပြားမည်။ ၎င်းကို စာရင်းသွင်းချိန်တွင် ကျပန်းနည်းလမ်းဖြင့် ထုတ်လုပ်ရမည်။

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

html<?php
  function generateSalt()
  {
    $salt = '';
    $saltLength = 8; // ဆား၏အရှည်
    
    for($i = 0; $i < $saltLength; $i++) {
      $salt .= chr(mt_rand(33, 126)); // ASCII-table မှ စာလုံး
    }
    
    return $salt;
  }
?>

ဤ function ကိုအသုံးပြု၍ ကျွန်ုပ်တို့၏ကုဒ်ကို ဤသို့ပြန်ရေးနိုင်သည်။

html<?php
  $salt = generateSalt(); // ဆား
  $password = md5($salt . $_POST['password']); // ဆားထည့်ထားသော စကားဝှက်
?>

ဤသည်မှာ စာရင်းသွင်းချိန်တွင် ပြောင်းလဲမှုများဖြစ်သည်ဟု ထပ်မံပြောပါမည်။ - Database တွင် ရိုးရိုးစကားဝှက် hash ကို မဟုတ်ဘဲ ဆားထည့်ထားသော စကားဝှက်၏ hash ကို သိမ်းဆည်းမည်။

ဤမျှနှင့် မပြီးသေးပါ။ users ဇယားတွင် <login> နှင့် <password> ကွင်းများအပြင် <salt> ကွင်းတစ်ခုကိုလည်း လုပ်ရန်လိုအပ်သည်။ ထိုကွင်းတွင် အသုံးပြုသူတစ်ဦးစီ၏ ဆားကို သိမ်းဆည်းမည်။

Задание 1

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