ခေတ်သစ်ဝက်ဘ်ဖွံ့ဖြိုးတိုးတက်မှုတွင်အသုံးပြုသူ authentication ၏လုံခြုံရေးသည်အလွန်အရေးကြီးသည်။ စကားဝှက်ကာကွယ်မှုကိုမထားပါကသုံးစွဲသူသတင်းအချက်အလက်ယိုစိမ့်မှုကိုယိုစိမ့်မှုသို့ပို့ဆောင်ရန်နှင့်မမေ့နိုင်သောဆုံးရှုံးမှုများကိုဖြစ်ပေါ်စေသည်။ PHP ၏ built-in crypt () function သည် password encryption အတွက်ခိုင်မာသောထောက်ခံမှုပေးသည်။ ကျိုးကြောင်းဆီလျော်သောလုပ်ငန်းစဉ်ဒီဇိုင်းနှင့်ပေါင်းစပ်ပြီး၎င်းသည် authentication လုံခြုံရေးကိုများစွာတိုးတက်စေနိုင်သည်။ ဤဆောင်းပါးသည်လုံခြုံပြီးစိတ်ချရသောအသုံးပြုသူစစ်မှန်ကြောင်းအတည်ပြုခြင်းလုပ်ငန်းစဉ်ကိုအကောင်အထည်ဖော်ရန် Crypt () ကို မည်သို့အသုံးပြုရမည်ကိုအသေးစိတ်ဖော်ပြထားသည်။
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 နှင့်ရှုပ်ထွေးမှုကိုဆုံးဖြတ်နိုင်သည်။
အသုံးပြုသူတစ် ဦး ကိုမှတ်ပုံတင်သည့်အခါကျွန်ုပ်တို့သည်စာသား 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) ဆား၏ကျပန်းသေချာစေရန်ခိုင်မာတဲ့ကျပန်းနံပါတ်များကိုထုတ်ပေးသည်။
အသုံးပြုသူမှတ်တမ်းများ 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 ၏စကားဝှက်နှင့်သက်ဆိုင်သောဆားနှင့်အတူတူပင်ဖြစ်သည်။
<?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 "用户名သို့မဟုတ်密码错误";
}
}
}
?>
HTTPS ကိုသုံးပါ ။ Data Transmission Process ကိုစာဝှက်ခြင်းနှင့်လူတို့၏အလယ်အလတ်တိုက်ခိုက်မှုများကိုကာကွယ်ရန်သေချာစေပါ။
login ကြိုးစားမှုအရေအတွက်ကိုကန့်သတ်ပါ ။ brute force cracking ကိုတားဆီးပါ။
ပုံမှန် encryption ကုန်ကျစရိတ်များကိုပုံမှန်မွမ်းမံခြင်း - ဟာ့ဒ်ဝဲစွမ်းဆောင်ရည်တိုးတက်လာသည်နှင့်အမျှ Flowish ၏ကုန်ကျစရိတ် parameter များကိုအချိန်မီတိုးပွားလာသည်။
စကားဝှက်ကိုအားသာချက်အထောက်အထားရှာဖွေတွေ့ရှိမှု - အသုံးပြုသူသည်မှတ်ပုံတင်သည့်အခါခိုင်မာသောစကားဝှက်တစ်ခုချမှတ်ရန်အချက်ပြနေသည်။
အထိခိုက်မခံသောသတင်းအချက်အလက်များကိုလွင်ပြင်စာသားဖြင့်သိမ်းဆည်းခြင်းမပြုပါနှင့် ။