မျက်မှောက်ခေတ် Web Development တွင်အသုံးပြုသူစကားဝှက်များကိုလုံခြုံသောသိုလှောင်မှုသည်အရေးပါသောအလုပ်ဖြစ်သည်။ Rainbow Table Attack ဆိုသည်မှာမူရင်းစကားဝှက်များကိုလျင်မြန်စွာကိုက်ညီရန်ကွန်ပျူတာမတိုင်မီ hash ဇယားများပေါ်တွင်မှီခိုသော pre-computed hash text များပေါ်တွင်မှီခိုသောစကားဝှက် cracking technique တစ်ခုဖြစ်သည်။ ဤတိုက်ခိုက်မှုကိုထိရောက်စွာကာကွယ်ရန်ကျွန်ုပ်တို့သည်စကားဝှက် hash သို့ဆားထည့်ရမည်။ PHP ၏ Crypt () function သည်ဤစိန်ခေါ်မှုကိုကိုင်တွယ်နိုင်သည့်ကိရိယာတစ်ခုဖြစ်သည်။ သို့သော်၎င်းကိုမှန်ကန်စွာအသုံးပြုမှသာဖြစ်သည်။
PHP's Crypt () function ကိုတစ်လမ်းတည်း၌ကြိုးများကိုစာဝှက်ရန်အသုံးပြုသည်။ ၎င်းသည်ရိုးရာ des, MD5 နှင့်ပိုမိုလုံခြုံသော blowfish ( $ 2Y $ ) နှင့် Sha-256/512 ( $ 5 $ 6 $ 6 ဒေါ်လာ ) အပါအ 0 င်စာဝှက်စနစ် algorithms အမျိုးမျိုးကိုထောက်ပံ့သည်။
function ရှေ့ပြေးပုံစံသည်အောက်ပါအတိုင်းဖြစ်သည် -
string crypt(string $string, string $salt);
$ string ကို encrypt လုပ်ထားရန်မူရင်း string ကိုအဘယ်မှာရှိ, $ ဆား ဆုံးဖြတ်သည်။ မည်သည့် algorithm ကိုအသုံးပြုမည်ကိုဆုံးဖြတ်သည်။
သက်တံ့စားပွဲတင်တိုက်ခိုက်မှုသည် Hash တန်ဖိုးများကိုတွက်ချက်မှုကိုတွက်ချက်ခြင်းအပေါ်မူတည်သည်။ သို့သော်, hash တစ်ခုစီ၏ဆားတန်ဖိုးသည်ကွဲပြားခြားနားပါကတိုက်ခိုက်သူသည်ကိုက်ညီရန်ဘုံသက်တံ့စားပွဲ၌မသုံးနိုင်ပါ။ Crypt () က ဆားတန်ဖိုးကိုစိတ်ကြိုက်ပြုပြင်ရန်ခွင့်ပြုပြီးခိုင်မာသော encryption algorithms နှင့်ပေါင်းစပ်ရန်ခွင့်ပြုသည်။ ဤတိုက်ခိုက်မှုကိုကျွန်ုပ်တို့ထိရောက်စွာရှောင်ရှားနိုင်သည်။
ဥပမာအားဖြင့်ကျွန်ုပ်တို့သည်ဤကဲ့သို့သော dynamic sinnamm နှင့် dynamic salt တန်ဖိုးများကိုသုံးနိုင်သည်။
$password = 'user-password';
$salt = '$2y$10$' . substr(strtr(base64_encode(random_bytes(16)), '+', '.'), 0, 22);
$hash = crypt($password, $salt);
အထက်ပါကုဒ်၌:
$ 2y $ 10 $ 10 $ သည် Blowfish algorithm ကို အသုံးပြု. 10 ခုမြောက်ကုန်ကျစရိတ် 10 ခုနှင့်အသုံးပြုသည်။
DismanT_bytes (16) အပြင်းအထန်ကျပန်းဆားထုတ်လုပ်သည်။
Substrict (... , 0, 22) ကို blowfish salt format နှင့်ကိုက်ညီသောအရှည်ကိုဖြတ်သည်။
ဤနည်းဖြင့်ရရှိသော $ hash သည် ဆားထည့်ပြီးနောက်စကားဝှက် hash ဖြစ်သည်။
အသုံးပြုသူမှတ်တမ်းတင်သည့်အခါကျွန်ုပ်တို့သည်ဆားကိုထပ်မံထုတ်ပေးရန်မလိုအပ်ပါ, သို့သော်၎င်းကို Salt Parameter သည်ဒေတာဘေ့စ်တွင်သိုလှောင်ထားရန်တိုက်ရိုက်ထုတ်လွှ င့ ်ရန်မလိုအပ်ပါ။
$inputPassword = 'user-input';
$storedHash = '$2y$10$qzWRzYy5q3DvYbEC0KMX4O0PGWlOQxkz7v0QF5OwMqpyG0TzjSAGK'; // ဒေတာဘေ့စကနေ
if (hash_equals($storedHash, crypt($inputPassword, $storedHash))) {
echo 'စကားဝှက်မှန်';
} else {
echo 'စကားဝှက်';
}
ဤနည်းအားဖြင့် crypt () သည် hash ရှိဆားနှင့် algorithm ကို အသုံးပြု. စကားဝှက်ကိုအလိုအလျောက် encrypt လုပ်ပြီး၎င်းကိုနှိုင်းယှဉ်လိမ့်မည်။ ဤနည်းလမ်းသည်ရိုးရှင်းလွယ်ကူသည်။
$hash = crypt($password, 'fixedsalt');
ဤနည်းလမ်းသည်သက်တံ့စားပွဲတင်တိုက်ခိုက်မှုများကိုအလွန်အားနည်းနေသည်။
$hash = crypt($password, 'ab'); // DES algorithm,အရမ်းတိုတိုဆား
Des သည်ဆားတိုရုံသာမကတွက်ချက်မှုကုန်ကျစရိတ်နိမ့်ခြင်းနှင့်ခေတ်သစ်ဟာ့ဒ်ဝဲသည်အလွယ်တကူ brute-force crack ကိုအလွယ်တကူ brute-force အက်ကွဲနိုင်သည်။
Crypt () သည်လုံခြုံမှုရှိသော်လည်း PHP သည် PHP သည် password_hash () နှင့် password_verify () ကို အသုံးပြု. 5.5 မှ စ. ပိုမိုခေတ်မီသောစကားဝှက်ကိုဆေးကြောခြင်း API ကိုအသုံးပြုသည်။ သို့သော်သင်သည်စီမံကိန်းဟောင်းကိုထိန်းသိမ်းထားခြင်းသို့မဟုတ်ငိုတတ်သောအကြောင်းပြချက်များအတွက် crypt () ကို အသုံးပြုနေဆဲဆိုလျှင်, သင့်ကိုအောက်ပါအတိုင်းလုပ်ပါသေချာအောင်လုပ်ပါ။
ခိုင်ခံ့သော algorithms ကိုသုံးပါ (ဥပမာ $ 2Y $ 2Y $ 5 ဒေါ်လာ , $ 6 $ );
အမြဲတမ်းကျပန်းနှင့်ရှည်လျားသောဆားတန်ဖိုးများကိုသုံးပါ။
ဆားကိုဘယ်တော့မှမသုံးပါနှင့်။
သီးခြားသိုလှောင်ထားသည့်အစားဆားငန်တန်ဖိုးများကို hash တွင်သိုလှောင်ထားသင့်သည်။
// မှတ်ပုံတင်သည့်အခါ
$password = $_POST['password'];
$salt = '$2y$12$' . substr(strtr(base64_encode(random_bytes(16)), '+', '.'), 0, 22);
$hash = crypt($password, $salt);
// ကုန်လေှာင်ရုံ $hash ဒေတာဘေ့စကိုသွားပါ
// ဝင်သောအခါ
$inputPassword = $_POST['password'];
$storedHash = getHashFromDatabase(); // ဒေတာဘေ့စကနေရယူပါ
if (hash_equals($storedHash, crypt($inputPassword, $storedHash))) {
echo 'အောင်မြင်စွာဝင်ပါ';
} else {
echo 'စကားဝှက်';
}
သင် https://m66.net/php-Crypt-Guide ကို ဥပမာပိုများများဖြင့်ရယူရန်သင်ရယူနိုင်သည်။
Crypt () function ကိုမှန်ကန်စွာအသုံးပြုခြင်းသည်သက်တံ့စားပွဲဝိုင်းတိုက်ခိုက်မှုများကိုထိရောက်စွာတားဆီးနိုင်သည်။ အဓိကသော့ချက်မှာခိုင်မာသော encryption algorithms, ကျပန်းဆားတန်ဖိုးများနှင့်လုံခြုံရေးအလေ့အကျင့်များကိုအသုံးပြုရန်ဖြစ်သည်။ ပရောဂျက်အသစ်သည် Password_Hash () လုပ်ဆောင်ချက်များကို အသုံးပြု. အကြံပြုသည်မှာလုံခြုံစိတ်ချရသော Crypt () သည် PHP developer တိုင်းအတွက်မသင်မနေရသင်တန်းကိုကျွမ်းကျင်မှုတစ်ခုဖြစ်စေသည်။