လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> hashh_equals နှင့်စကားဝှက်များကိုလုံခြုံစွာနှိုင်းယှဉ်ရန် crypt () ကိုသုံးပါ။

hashh_equals နှင့်စကားဝှက်များကိုလုံခြုံစွာနှိုင်းယှဉ်ရန် crypt () ကိုသုံးပါ။

M66 2025-05-20

အသုံးပြုသူ authentication system ကိုတည်ဆောက်ရာတွင်လုံခြုံစိတ်ချရသောစကားဝှက်များကို developer များအာရုံစိုက်ရမည်ဟူသောပြ issue နာဖြစ်သည်။ စကားဝှက်များကိုမမှန်မကန်နှင့်နှိုင်းယှဉ်ခြင်းကစနစ်ကိုအချိန်ကြာမြင့်စွာတိုက်ခိုက်မှုများကဲ့သို့သောလုံခြုံရေးခြိမ်းခြောက်မှုများကိုခံယူနိုင်သည်။ PHP သည် password စစ်ဆေးခြင်းကိုလုံလုံခြုံခြုံကိုင်တွယ်ရန်ကူညီနိုင်သည့် built-in function အချို့ကိုထောက်ပံ့ပေးသည်။ သူတို့တွင် crypt () နှင့် hash_equals () ပေါင်းစပ်မှုပေါင်းစပ်ခြင်းသည်လုံခြုံစိတ်ချရသောနည်းလမ်းဖြစ်သည်။

1 ။ Crypt () function ကဘာလဲ?

Crypt () သည် PHP ၏စာ ဝှက် ခြင်းလုပ်ငန်းတစ်ခုဖြစ်သည် ၎င်း၏ syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -

 string crypt(string $string, string $salt)

ဆား parameter သည် encryption algorithm နှင့်၎င်း၏အပြုအမူဆုံးဖြတ်သည်။ မျက်မှောက်ခေတ်လျှောက်လွှာများအတွက် BCRYPT အကြံပြုသည်။ သင့်လျော်သော ဆားကို အောက်ပါနည်းလမ်းများဖြင့်အလိုအလျောက်ထုတ်လုပ်နိုင်သည်။

 $salt = '$2y$10$' . substr(strtr(base64_encode(random_bytes(16)), '+', '.'), 0, 22);
$hash = crypt('mypassword', $salt);

2 ။ သင်၏ စကားဝှက် hashes များကိုနှိုင်းယှဉ်ရန်သင်ဘာကြောင့်မ သုံးနိုင် တာလဲ။

အစပြုသူများသည်စကားဝှက်များကိုအတည်ပြုရန်အောက်ပါကုဒ်ကိုရေးလိမ့်မည်။

 if (crypt($inputPassword, $storedHash) == $storedHash) {
    // အောင်မြင်စွာဝင်ပါ
}

၎င်းသည် function တွင်ဖြစ်နိုင်ခြေရှိပုံရသည်, သို့သော်ကြီးမားသောလုံခြုံရေးအန္တရာယ်ရှိသည် Attacker သည်ပရိုဂရမ်တုန့်ပြန်မှုအချိန်အနည်းငယ်ကွာခြားမှုကိုတိုင်းတာခြင်းအားဖြင့်မှန်ကန်သောစကားဝှက် hash ကိုတဖြည်းဖြည်းခန့်မှန်းနိုင်သည်။

3 ။ လုံခြုံစိတ်ချရသောအလေ့အကျင့် - Hash_equals () ကိုသုံးပါ။

အချိန်ကြာမြင့်စွာတိုက်ခိုက်မှုပြ problem နာကိုဖြေရှင်းရန် PHP သည် hash_equals () function ကို 5.6 ကတည်းက 5.6 ကတည်းက 5.6 ကတည်းက 5.6 ကတည်းက

 bool hash_equals(string $known_string, string $user_string)

၎င်းသည်အမြဲတမ်းအချိန် algorithm ကိုအသုံးပြုသည်။ string ၏ပါဝင်မှုကို အခြေခံ. ကြိုတင်မပြန်ပါ။

4 ။ ကောင်းသောဥပမာ crypt () နှင့် hash_equals () ပေါင်းစပ်ပေါင်းစပ်ပေါင်းစပ်

 <?php
// ကျွန်ုပ်တို့သည်စာဝှက်ထားတဲ့စကားဝှက် hash ကိုဒေတာဘေ့စ်ကနေရမယ်ဆိုပါစို့
$storedHash = '$2y$10$9YzyYtVht3tcGEn.7PiF2OlRM0HDTrM7Z5D.yPi8hdm0fJeFVKH4K'; // အပေါ်မူတည်သည် crypt() ဖြစ်သော bcrypt ဟက်ရှုပ်
$inputPassword = $_POST['password'] ?? '';

// အသုံးပြု crypt() 对အသုံးပြု户输入的密码进行ဟက်ရှုပ်,使အသုံးပြု存储ဟက်ရှုပ်作为 salt
$inputHash = crypt($inputPassword, $storedHash);

// 使အသုံးပြု hash_equals() ဘေးကင်းလုံခြုံရေးနှိုင်းယှဉ်
if (hash_equals($storedHash, $inputHash)) {
    echo "အောင်မြင်စွာဝင်ပါ!";
} else {
    echo "စကားဝှက်!";
}
?>

5 ။ မျက်မှောက်ခေတ်အလေ့အကျင့်များ (ဖြည့်စွက်)

Crypt () သည်လုံခြုံမှုရှိသော်လည်း PHP အရာရှိ PHP မှတာဝန်ရှိသူသည် algorithm ရွေးချယ်မှုနှင့်လုံခြုံရေးနှိုင်းယှဉ်မှုဖြစ်စဉ်ကိုပိုမိုလွယ်ကူစွာပိုမိုလွယ်ကူစေရန်အတွက် Php Password_hash () () () passwordy) ကို အသုံးပြု. PHP အရာရှိကအကြံပြုသည်။ ဥပမာအားဖြင့်:

 // 创建密码ဟက်ရှုပ်
$hash = password_hash('mypassword', PASSWORD_BCRYPT);

// စကားဝှက်ကိုစစ်ဆေးပါ
if (password_verify($inputPassword, $hash)) {
    echo "အတည်ပြုအတည်ပြု";
}

သို့သော်အချို့သောအခြေအနေများတွင် (ထိုကဲ့သို့သောစနစ်များကိုထိန်းသိမ်းခြင်းသို့မဟုတ်အထူးလိုအပ်ချက်များရှိခြင်းကဲ့သို့သောနေရာများ) သည် crypt () နှင့် hash_equals () ပေါင်းစပ်ခြင်းသည်လက်ခံနိုင်ဖွယ်ကောင်းပြီးလုံခြုံစိတ်ချရသောဖြေရှင်းနည်းတစ်ခုဖြစ်သည်။

6 ။ အကျဉ်းချုပ်

  • == သို့မဟုတ် === ကိုမသုံးပါနှင့် password hashes ကိုနှိုင်းယှဉ်ခြင်း,

  • Crypt () hash password ကိုသုံးသောအခါ, သင်သည် ဆား နှင့် algorithm ကိုမှန်ကန်စွာရွေးချယ်ရမည် (BCRYPT အကြံပြုသည်);

  • အချိန်ဇယားများကိုတားဆီးရန် Hash_equals () ကို အသုံးပြုပါ။

  • တိကျသောအကြောင်းပြချက်မရှိပါက password_hash () နှင့် password_verifies () ကို အသုံးပြုရန်အကြံပြုသည်။

Security သည်ရွေးချယ်စရာတစ်ခုမဟုတ်ပါ။ အသုံးပြုသူစကားဝှက်များကိုထုတ်ယူသောအခါလိုအပ်ချက်တစ်ခုမဟုတ်ပါ။ မှန်ကန်သောချဉ်းကပ်မှုသည်အသုံးပြုသူသီးသန့်တည်ရှိမှုကိုသာအကာအကွယ်ပေးနိုင်ရုံသာမကစနစ်တစ်ခုလုံးကိုတိုက်ခိုက်ရန်ကိုလည်းတိုးတက်စေသည်။