PHP ၏ Crypt () function ကိုအသုံးပြုသောအခါ developer များစွာသည်ထူးဆန်းသောဖြစ်ရပ်တစ်ခုကိုသတိပြုမိကြလိမ့်မည်။ တစ်ခါတစ်ရံတွင်စာဝှက်ခြင်းရလဒ်သည်တစ်ခါတစ်ရံတွင်စာလုံး 13 လုံး, ဤရှေ့နောက်မညီမှုသည်ဤရှေ့နောက်မညီမှုသည်လူများကိုအလွယ်တကူမှားယွင်းစွာထင်မြင်နိုင်ပြီးကုဒ်သည်ကုဒ်များတွင်မှားယွင်းစွာစဉ်းစားမိသည်။ ဒီတော့ဘာဖြစ်နေတာလဲ
PHP ၏ crypt () function သည် encapsulated encryption interface တစ်ခုဖြစ်ပြီးနောက်ခံအလွှာသည် operating system မှပေးထားသော encryption algorithm ပေါ်တွင်မူတည်သည်။ ဤလုပ်ဆောင်ချက်၏ပထမဆုံး pareter သည်စာဝှက်ရန် string ကိုနှင့်ဒုတိယ parameter သည် "ဆားဖြစ်သည်" ဖြစ်သည်။ ဤဆားသည်စာဝှက်ခြင်းရလဒ်များ၏ထူးခြားမှုကိုသက်ရောက်စေသည်။ သို့သော်မည်သည့် encryption algorithm ကိုအသုံးပြုသည်ကိုဆုံးဖြတ်သည်။
echo crypt("mypassword", "salt");
အကယ်. သင်သည်ဆားငန်သောတန်ဖိုးများကိုမသုံးပါက PHP သည်အများအားဖြင့်အရိုးရာ des (data encryption standard) algorithm ကဲ့သို့သောအဟောင်းစာဝှက်စနစ်များကိုအလိုအလျောက်ပြန်ကျဆင်းလိမ့်မည်။
အဆိုပါ crypt () function က algorithms မျိုးစုံကိုထောက်ခံပါတယ်နှင့်ကွဲပြားခြားနားသော algorithms ကွဲပြားခြားနားသော algorithms ဆားတန်ဖိုးကိုရှေ့ဆက်ကဆုံးဖြတ်သည်။ ဤတွင်အများသုံးဆားတန်ဖိုးပုံစံများနှင့်၎င်းတို့၏သက်ဆိုင်ရာစာဝှက်စနစ် algorithms:
algorithm | Salt Value format | ရလဒ်အရှည် |
---|---|---|
သံ | ဇာတ်ကောင် 2 ယောက် | စာလုံး 13 လုံး |
MD5 | $ 1 $ ... | စာလုံးရေ 34 လုံး |
လေ | $ 2A $ ... / $ 2y $ ... | ဇာတ်ကောင် 60 |
Sha-256 | $ 5 $ ... | စာလုံး 43 လုံး |
Sha-512 | $ 6 $ ... | အက်ခရာ 86 လုံး |
ဒါကြောင့်သင်ကရှေ့ဆက်ထားတဲ့ဆားတန်ဖိုးကိုအတိအလင်းမသွားဘူးဆိုရင်,
ဥပမာအားဖြင့်:
// အသုံးပြု SHA-512 စာဝှက်ပယ်
echo crypt("mypassword", '$6$rounds=5000$usesomesillystring$');
// output နှင့်ဆင်တူသည်:$6$rounds=5000$usesomesill...(ခန့်မှန်းခြေအားဖြင့်စုစုပေါင်းအရှည်86)
နောက်ကုဒ်သည် default des des algorithm ကိုအသုံးပြုသည်။
echo crypt("mypassword", 'sa');
// output နှင့်ဆင်တူသည်:sahGDf/YwKdl6(တခုတည်းသော, တဉီးတည်းသော13ဇာတ်ကောင်)
ဤပြ problem နာ ကို ရှောင် ရှား ရန် Salt တန်ဖိုးများကိုရှင်းလင်းပြတ်သားစွာရှေ့ဆက်များဖြင့်အမြဲတမ်းသုံးပါ, ထုတ်လုပ်ထားသောကျပန်းဆားများ,
သင်သည်ဤကဲ့သို့သောဆားတန်ဖိုးများကိုအလိုအလျောက်ထုတ်လုပ်နိုင်သည်။
function generateSalt($algo = 'sha512') {
switch ($algo) {
case 'blowfish':
return '$2y$10$' . substr(str_replace('+', '.', base64_encode(random_bytes(22))), 0, 22);
case 'sha256':
return '$5$' . bin2hex(random_bytes(6));
case 'sha512':
default:
return '$6$' . bin2hex(random_bytes(6));
}
}
$password = 'mypassword';
$salt = generateSalt('sha512');
$hash = crypt($password, $salt);
echo $hash;
<?php
function hashPassword($password) {
$salt = '$2y$10$' . substr(str_replace('+', '.', base64_encode(random_bytes(22))), 0, 22);
return crypt($password, $salt);
}
$plainPassword = '123456';
$hashed = hashPassword($plainPassword);
// ဒေတာဘေ့စ်မှသိမ်းဆည်းထားယူဆ
file_put_contents('/var/www/m66.net/passwords.txt', $hashed . PHP_EOL);
// စကားဝှက်ကိုစစ်ဆေးပါ
$inputPassword = '123456';
$isValid = crypt($inputPassword, $hashed) === $hashed;
echo $isValid ? 'စကားဝှက်မှန်' : 'စကားဝှက်';
?>
Vallopt () function ကိုအသုံးပြုသောအခါရလဒ်အမျိုးမျိုးအတွက်အခြေခံအကြောင်းရင်းမှာ "ဆားတန်ဖိုး" ပုံစံသည် encryption algorithm ကိုဆုံးဖြတ်သည်။ စာဝှက်စနစ်လုံခြုံရေးနှင့်ရှေ့နောက်ညီညွတ်မှုကိုသေချာစေရန် -
အမြဲတမ်းမှန်ကန်သော format / ဆားတန်ဖိုးကိုအတိအလင်းဖြတ်သွား ;
ထိုကဲ့သို့သော $ 2Y $ သို့မဟုတ် $ 6 $ အဖြစ်ခေတ်သစ်, လုံခြုံသော algorithms ကိုရွေးပါ ။
ပုံမှန်အပြုအမူသို့မဟုတ်တိုတောင်းသောဆားပုံစံများကိုအားမကိုးပါနှင့် ။
ဤအခြေခံအသေးစိတ်အချက်အလက်များကိုနားလည်ပြီးနောက်လျှို့ဝှက်လုံခြုံရေးအန္တရာယ်များကို password processing တွင်ရှောင်ရှားနိုင်ပြီးသင်၏ encryption logic ကိုပိုမိုထိန်းချုပ်နိုင်ပြီးယုံကြည်စိတ်ချရသော