လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Crypt () လုံခြုံသောအသုံးပြုသူစစ်မှန်ကြောင်းအတည်ပြုခြင်းလုပ်ငန်းစဉ်ကိုအကောင်အထည်ဖော်ရန်

Crypt () လုံခြုံသောအသုံးပြုသူစစ်မှန်ကြောင်းအတည်ပြုခြင်းလုပ်ငန်းစဉ်ကိုအကောင်အထည်ဖော်ရန်

M66 2025-05-22

ခေတ်သစ်ဝက်ဘ်ဖွံ့ဖြိုးတိုးတက်မှုတွင်အသုံးပြုသူ authentication ၏လုံခြုံရေးသည်အလွန်အရေးကြီးသည်။ စကားဝှက်ကာကွယ်မှုကိုမထားပါကသုံးစွဲသူသတင်းအချက်အလက်ယိုစိမ့်မှုကိုယိုစိမ့်မှုသို့ပို့ဆောင်ရန်နှင့်မမေ့နိုင်သောဆုံးရှုံးမှုများကိုဖြစ်ပေါ်စေသည်။ PHP ၏ built-in crypt () function သည် password encryption အတွက်ခိုင်မာသောထောက်ခံမှုပေးသည်။ ကျိုးကြောင်းဆီလျော်သောလုပ်ငန်းစဉ်ဒီဇိုင်းနှင့်ပေါင်းစပ်ပြီး၎င်းသည် authentication လုံခြုံရေးကိုများစွာတိုးတက်စေနိုင်သည်။ ဤဆောင်းပါးသည်လုံခြုံပြီးစိတ်ချရသောအသုံးပြုသူစစ်မှန်ကြောင်းအတည်ပြုခြင်းလုပ်ငန်းစဉ်ကိုအကောင်အထည်ဖော်ရန် Crypt () ကို မည်သို့အသုံးပြုရမည်ကိုအသေးစိတ်ဖော်ပြထားသည်။

1 ။ Crypt () function ကိုနားလည်ပါ

Crypt () function သည် Unix ၏ encryption algorithm ကိုအခြေခံသည်။ ကြိုးများ (များသောအားဖြင့်စကားဝှက်များ) ကိုစာဝှက်ရန်အသုံးပြုသည်။ ၎င်း၏အဓိကအားသာချက်မှာ၎င်းသည် Sha-256, Sha-256, Sha-256, Sha-256, Sha-256, Sha-512 အပါအ 0 င်စာဝှက်စနစ်အယ်လ်ဂရွန်းများကိုထောက်ပံ့သည်။

function ရှေ့ပြေးပုံစံသည်အောက်ပါအတိုင်းဖြစ်သည် -

 string crypt(string $password, string $salt);
  • $ စကားဝှက်သည် စာဝှက်ရန်စကားဝှက်၏ရှင်းလင်းသောစာသားဖြစ်သည်။

  • $ ဆား သည် encryption algorithm နှင့်ရှုပ်ထွေးမှုကိုဆုံးဖြတ်နိုင်သည်။

2 ။ လုံခြုံသောအသုံးပြုသူမှတ်ပုံတင်ခြင်းလုပ်ငန်းစဉ်ကိုဒီဇိုင်းဆွဲပါ

အသုံးပြုသူတစ် ဦး ကိုမှတ်ပုံတင်သည့်အခါကျွန်ုပ်တို့သည်စာသား password ကိုစာဝှက်ရန်နှင့်ဒေတာဘေ့စ်တွင်သိမ်းဆည်းရန်လိုအပ်သည်။ ဥပမာများမှာအောက်ပါအတိုင်းဖြစ်သည် -

 <?php
// အသုံးပြုသူလက်အောက်ခံ Plaintext စကားဝှက်
$password = $_POST['password'];

// လုံခြုံသောဆားတစ်ခုထုတ်လုပ်ပါ(ဖြင့် Blowfish ဥပမာတစ်ခုအနေဖြင့်)
$salt = '$2y$12$' . substr(str_replace('+', '.', base64_encode(random_bytes(16))), 0, 22);

// အသုံးပြု crypt() encryption password
$hashedPassword = crypt($password, $salt);

// သေတမ်းစာ $hashedPassword ဒေတာဘေ့စ်ကိုသိမ်းပါ
// နမူနာ:mysqli သို့မဟုတ် PDO code ကိုရိုးရှင်း

echo "စာဝှက်ထားတဲ့စကားဝှက်:$hashedPassword";
?>
  • အဆိုပါ blowfish algorithm ကိုဒီမှာအသုံးပြုသည်။ $ 2Y $ သည် blowfish ကိုကိုယ်စားပြုပြီး 12 သည်တွက်ချက်မှုကုန်ကျစရိတ်ဖြစ်သည်။ နံပါတ်ပိုကြီးတဲ့, ဒါကပိုလုံခြုံပေမယ့်တွက်ချက်မှုနှေးကွေးတယ်။

  • DismanT_bytes (16) ဆား၏ကျပန်းသေချာစေရန်ခိုင်မာတဲ့ကျပန်းနံပါတ်များကိုထုတ်ပေးသည်။

3 ။ လုံခြုံတဲ့ login အတည်ပြုခြင်းလုပ်ငန်းစဉ်ကိုအကောင်အထည်ဖော်ပါ

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

 <?php
// အသုံးပြုသူအားဖြင့်ထည့်သွင်းထားသောစကားဝှက်
$password = $_POST['password'];

// ဒေတာဘေ့စ်မှ hash စကားဝှက်ကိုမေးမြန်းခြင်း
$storedHash = /* စုံစမ်းမှုကြေညာချက်အားဖြင့်ရရှိသောစကားဝှက် hash */;

// အသုံးပြု相同盐值重新加密输入密码
$checkHash = crypt($password, $storedHash);

if (hash_equals($storedHash, $checkHash)) {
    // အတည်ပြုအတည်ပြု
    echo "အောင်မြင်စွာဝင်ပါ";
} else {
    // အတည်ပြုပျက်ကွက်
    echo "用户名သို့မဟုတ်密码错误";
}
?>
  • အချိန်တိုက်ခိုက်မှုများကိုရှောင်ရှားရန်အချိန် - လုံခြုံနှိုင်းယှဉ်မှုများပြုလုပ်ရန် hash_equals () ကို သုံးပါ။

  • Input Password သည်ဒေ တာ ဘေ့စ်တွင် Hash ၏စကားဝှက်နှင့်သက်ဆိုင်သောဆားနှင့်အတူတူပင်ဖြစ်သည်။

4 ။ ပြည့်စုံသောဥပမာအသုံးပြုသူမှတ်ပုံတင်ခြင်းနှင့် login လုပ်ငန်းစဉ်

 <?php
// 连接数据库နမူနာ(အသုံးပြု mysqli)
$mysqli = new mysqli("m66.net", "user", "password", "database");

// အသုံးပြုသူမှတ်ပုံတင်ခြင်း
function registerUser($username, $password) {
    global $mysqli;

    $salt = '$2y$12$' . substr(str_replace('+', '.', base64_encode(random_bytes(16))), 0, 22);
    $hashedPassword = crypt($password, $salt);

    $stmt = $mysqli->prepare("INSERT INTO users (username, password) VALUES (?, ?)");
    $stmt->bind_param("ss", $username, $hashedPassword);
    return $stmt->execute();
}

// အသုံးပြုသူ login စိစစ်အတည်ပြု
function loginUser($username, $password) {
    global $mysqli;

    $stmt = $mysqli->prepare("SELECT password FROM users WHERE username = ?");
    $stmt->bind_param("s", $username);
    $stmt->execute();
    $stmt->bind_result($storedHash);
    if (!$stmt->fetch()) {
        return false; // အသုံးပြုသူမတည်ရှိပါဘူး
    }
    $stmt->close();

    $checkHash = crypt($password, $storedHash);
    return hash_equals($storedHash, $checkHash);
}

// နမူနာ调用
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = $_POST['username'] ?? '';
    $password = $_POST['password'] ?? '';

    if (isset($_POST['register'])) {
        if (registerUser($username, $password)) {
            echo "အောင်မြင်စွာမှတ်ပုံတင်";
        } else {
            echo "မှတ်ပုံတင်ခြင်းမအောင်မြင်ပါ";
        }
    } elseif (isset($_POST['login'])) {
        if (loginUser($username, $password)) {
            echo "အောင်မြင်စွာဝင်ပါ";
        } else {
            echo "用户名သို့မဟုတ်密码错误";
        }
    }
}
?>

5 ။ အပိုဆောင်းဘေးကင်းလုံခြုံမှုအကြံဥာဏ်

  • HTTPS ကိုသုံးပါ ။ Data Transmission Process ကိုစာဝှက်ခြင်းနှင့်လူတို့၏အလယ်အလတ်တိုက်ခိုက်မှုများကိုကာကွယ်ရန်သေချာစေပါ။

  • login ကြိုးစားမှုအရေအတွက်ကိုကန့်သတ်ပါ ။ brute force cracking ကိုတားဆီးပါ။

  • ပုံမှန် encryption ကုန်ကျစရိတ်များကိုပုံမှန်မွမ်းမံခြင်း - ဟာ့ဒ်ဝဲစွမ်းဆောင်ရည်တိုးတက်လာသည်နှင့်အမျှ Flowish ၏ကုန်ကျစရိတ် parameter များကိုအချိန်မီတိုးပွားလာသည်။

  • စကားဝှက်ကိုအားသာချက်အထောက်အထားရှာဖွေတွေ့ရှိမှု - အသုံးပြုသူသည်မှတ်ပုံတင်သည့်အခါခိုင်မာသောစကားဝှက်တစ်ခုချမှတ်ရန်အချက်ပြနေသည်။

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