password_hash လုပ်ဆောင်ချက်
တကယ်တော့ md5 လုပ်ဆောင်ချက်နှင့် ၎င်းကို အသုံးပြု၍ စကားဝှက်ကို ဆားထည့်ခြင်းသည် ခေတ်နောက်ကျသွားပြီဟု ယူဆပါသည်။
နောက်ထပ်သင်ယူမှုအတွက် သင်နားလည်စေရန်နှင့် အခြားသူများ၏ ပရောဂျက်များတွင် သင်တွေ့ရှိနိုင်သောကြောင့် ၎င်းကို ကျွန်ုပ်တို့လေ့လာခဲ့ကြသည်။
ဆားထည့်ထားသော စကားဝှက်ကို ရရှိရန် ပိုမိုကောင်းမွန်သော နည်းလမ်းရှိပါသည်။ ၎င်းအတွက် password_hash လုပ်ဆောင်ချက်ကို အသုံးပြုပါသည်။ ၎င်း၏ ပထမပါရာမီတာအနေဖြင့် စတင်း၏၊ ဒုတိယပါရာမီတာအနေဖြင့် (နောက်မှဖော်ပြမည်) စာဝှက်ဖော်ခြင်းအယ်ဂိုရီသမ်ကို လက်ခံပြီး၊ ထိုစတင်းနှင့် ဆားကို အတူတကွ ပြန်ပေးသည်။
ဤကုဒ်ကို အကြိမ်ကြိမ်လည်ပတ်ကြည့်ပါ။
<?php
echo password_hash('12345', PASSWORD_DEFAULT);
?>
သင်သည် အကြိမ်တိုင်း ရလဒ်အမျိုးမျိုးကို ရရှိပြီး ထိုရလဒ်၏ ပထမအပိုင်းသည် ဆားဖြစ်ကာ၊ ဒုတိယအပိုင်းသည် ဆားထည့်ထားသော စကားဝှက်ဖြစ်ပါသည်။
ကျွန်ုပ်တို့၌ password_hash လုပ်ဆောင်ချက်မှ ရရှိသော ဟက်ရှ်နှင့် စကားဝှက်တစ်ခုခု ရှိသည်ဆိုပါစို့။ ၎င်းဟက်ရှ်သည် ထိုစကားဝှက်၏ ဟက်ရှ်ဟုတ်မဟုတ် စစ်ဆေးရန် password_verify လုပ်ဆောင်ချက်ကို အသုံးပြုရပါမည်။ ၎င်းသည် ပထမပါရာမီတာအနေဖြင့် စကားဝှက်ကို လက်ခံပြီး၊ ဒုတိယပါရာမီတာအနေဖြင့် ဟက်ရှ်ကို လက်ခံကာ true သို့မဟုတ် false ကို ပြန်ပေးပါသည်။
ဥပမာတစ်ခုဖြင့် ကြည့်ကြရအောင်။
<?php
$password = '12345'; // စကားဝှက်
$hash = '$2y$10$xoYFX1mFPxBSyxaRe3iIRutxkIWhxGShzEhjYUVd3qpCUKfJE1k7a'; // ဟက်ရှ်
if (password_verify($password, $hash)) {
// ဤစကားဝှက်၏ ဟက်ရှ်
} else {
// ဤစကားဝှက်မှ မဟုတ်သော ဟက်ရှ်
}
?>
၎င်းက လက်တွေ့တွင် ကျွန်ုပ်တို့အား ဘာပေးသနည်း။ ဒေတာဘေ့စ်တွင် ဆားသိမ်းဆည်းရန် သီးခြားကွက်လပ်ကို ဖန်တီးရန်မလို၊ ထိုဆားကို ထုတ်လုပ်ခြင်းနှင့် ပတ်သက်၍ စိတ်ပူစရာမလို - PHP က အားလုံးကို ကျွန်ုပ်တို့အတွက် လုပ်ပေးပါလိမ့်မည်။
ဆိုလိုသည်မှာ ဒေတာဘေ့စ်ရှိ password ကွက်လပ်တွင် ဆားနှင့်အတူ ဆားထည့်ထားသော စကားဝှက်ကို သိမ်းဆည်းထားမည်ဖြစ်သည်။ ထို့အပြင် ဟက်ရှ်ရိုက်ထားသော စကားဝှက်သည် အရှည်ပိုရှိပါလိမ့်မည်။ ထို့ကြောင့် ဒေတာဘေ့စ်တွင် စကားဝှက်ကွက်လပ်၏ အရွယ်အစားကို ပြင်ဆင်ပြီး 60 စာလုံးအထိ သတ်မှတ်ရပါမည်။
ယခု မှတ်ပုံတင်ခြင်း ကုဒ်ကို ပြင်ဆင်ကြရအောင်။ လက်ရှိတွင် ရှိနေသည်မှာ ဤအတိုင်းဖြစ်သည်။
<?php
function generateSalt()
{
$salt = '';
$saltLength = 8; // ဆား၏ အရှည်
for($i = 0; $i < $saltLength; $i++) {
$salt .= chr(mt_rand(33, 126)); // ASCII-table မှ စာလုံး
}
return $salt;
}
$salt = generateSalt(); // ဆား
$password = md5($salt . $_POST['password']); // စကားဝှက်ကို ဆားထည့်ထားသော ဟက်ရှ်အဖြစ် ပြောင်းလဲပါ
?>
password_hash ကို အသုံးပြု၍ ကျွန်ုပ်တို့သည် ဤအတိုင်း အတိုချုံးနိုင်သည်။
<?php
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
?>
အလားတူပင် အတည်ပြုခြင်း ကုဒ်ကို ပြင်ဆင်ပါမည်။
<?php
$login = $_POST['login'];
$query = "SELECT * FROM users WHERE login='$login'"; // လော့ဂ်အင်အမည်ဖြင့် ယူဇာကို ရယူပါ
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
if (!empty($user)) {
$hash = $user['password']; // ဒေတာဘေ့စ်မှ ဆားထည့်ထားသော စကားဝှက်
// ဒေတာဘေ့စ်မှ ဟက်ရှ်နှင့် ရိုက်ထည့်ထားသော စကားဝှက် ကိုက်ညီမှုကို စစ်ဆေးပါ
if (password_verify($_POST['password'], $hash)) {
// အားလုံးအဆင်ပြေ၊ အတည်ပြု...
} else {
// စကားဝှက် မကိုက်ညီ၊ မက်ဆေ့ဂျ်ပြပါ
}
} else {
// ထိုလော့ဂ်အင်အမည်ဖြင့် ယူဇာမရှိ၊ မက်ဆေ့ဂျ်ပြပါ
}
?>
သင်၏ အတည်ပြုခြင်းနှင့် မှတ်ပုံတင်ခြင်းကို လေ့လာထားသော အသစ်များဖြစ်သည့် လုပ်ဆောင်ချက်များသို့ ပြောင်းလဲပါ။