Crypt () function သည် PHP ကိုစာဝှက်ခြင်းသို့မဟုတ်စကားဝှက်များကို စာ ဝှက်ခြင်းသို့မဟုတ်စစ်ဆေးခြင်းအတွက် PHP ကိုအသုံးပြုခြင်းသည်အစောပိုင်းကာလများတွင်မရရှိလျှင်, သို့သော် developer များစွာသည် crypt () crypt () ကို အသုံးပြုသောအခါရှုပ်ထွေးသောပြ problem နာတစ်ခုကြုံတွေ့ရလိမ့်မည်။ ဤဆောင်းပါးသည်ဤဖြစ်စဉ်နောက်ကွယ်ရှိအကြောင်းရင်းများနှင့်ဤ "တွင်းများ" ကိုမည်သို့ရှောင်ရှားရမည်ကိုဤဆောင်းပါးသည်နက်နက်ရှိုင်းရှိုင်းလေ့လာပါလိမ့်မည်။
PHP ၏ crypt () function ကိုတစ်လမ်းတည်း၌ကြိုးများကိုစာဝှက်ရန်အသုံးပြုသည်။ ၎င်း၏အဓိကယုတ္တိဗေဒသည် "ဆားတန်ဖိုး" ( ဆား ) ကို အခြေခံ. အသုံးပြုမည့်မည်သည့် encryption algorithm ကိုရွေးချယ်ရန်ဖြစ်သည်။ ဤဆားသည် algorithm ကိုထိန်းချုပ်ရုံသာမကစာဝှက်ခြင်းလုပ်ငန်းစဉ်တွင်ပါ 0 င်သည်။ ဥပမာအားဖြင့်:
echo crypt('password', '$1$mysalt$'); // အသုံးပြု MD5 စာဝှက်ပယ်
ကွဲပြားသောရှေ့ဆက်များသည်မတူညီသောစာဝှက်စနစ် algorithms ကိုကိုယ်စားပြုသည်။
$ 1 $ သည် MD5 အခြေပြုစာဝှက်စနစ်ကို အသုံးပြု. ဆိုလိုသည်
$ 2A $ , $ 2Y $ 2Y $ , $ 2B $ Blowish (BCRYP) ကိုအသုံးပြုသည်။
$ 5 $ ကို Sha-256 ကိုအသုံးပြုသည်
$ 6 $ ကို Sha-512 ကိုအသုံးပြုသည်
Crypt () သည် PHP ၏စံသတ်မှတ်ထားသော function တစ်ခုဖြစ်သော်လည်း၎င်း၏အကောင်အထည်ဖော်မှုသည်အခြေခံစနစ် (Libc) ၏ C စာကြည့်တိုက်တွင်မူတည်သည်။ ဆိုလိုသည်မှာ PHP သည် System-Level Crypt () function ကိုသာစီတန်းတင်သည်။ ဤအရာကြောင့် Crypt ၏အပြုအမူဆိုင်ရာကွဲပြားခြားနားသောကွဲပြားခြားနားမှုများအရအောက်ပါအတိုင်းဖော်ပြထားသည့်ကွဲပြားခြားနားသော operating system များအကြားသိသာထင်ရှားသောကွဲပြားခြားနားမှုများရှိနိုင်သည်။
စနစ်များအားလုံးသည်တူညီသော encryption algorithm ကိုထောက်ပံ့သည်မဟုတ်။ ဥပမာအားဖြင့်:
MacOS စနစ်များ၏အချို့သောအဟောင်းများဗားရှင်းများသည်ရိုးရာ des encryption ကိုသာထောက်ပံ့သည်။
Linux (အထူးသဖြင့် GNU Libc ကိုအသုံးပြုသောစနစ်) သည် MD5, Sha-256, Sha-512, blowish,
Alpine Linux သည်အချို့သော Algorithms အားအထူးသဖြင့် Bcrypt နှင့် BCrypt တို့ကြောင့်အချို့သော algorithms များအတွက်မပြည့်စုံသောအထောက်အပံ့များရှိသည်။
ဆိုလိုသည်မှာ Ubuntu ကို အသုံးပြု . Ubuntu တွင်ကောင်းမွန်စွာလည်ပတ်နေသော script သည် alpine ကွန်တိန်နာတွင် * 0 သို့မဟုတ် * 1 (ပျက်ကွက်ခြင်း) ကိုတိုက်ရိုက်ပြန်ပို့နိုင်သည်။ သို့မဟုတ်မှားယွင်းသောပုံစံဖြင့် hash string ကိုပြန်ပို့နိုင်သည်။
အချို့သောစနစ်များတွင်တူညီသော algorithm ကိုထောက်ပံ့ထားသည့်တိုင်, ပြန်လည်နေရာချထားသည့် encryption ရလဒ်များကိုအနည်းငယ်ကွဲပြားသောပုံစံများရှိနိုင်သည်။ ဥပမာအားဖြင့်:
$hash1 = crypt('password', '$2y$10$1234567890123456789012'); // တည်နေ Linux အကောင်းဆုံး
$hash2 = crypt('password', '$2y$10$1234567890123456789012'); // တည်နေ macOS အကောင်းဆုံး
အထက်ပါလိုင်းနှစ်ခုမှကုဒ်နံပါတ်များသည်မတူကွဲပြားသော ဒေါ်လာဒေါ်လာ နှင့် ဒေါ်လာ hash2 သည် ကွဲပြားခြားနားနိုင်ပြီးမတူညီသောစနစ်၏ဗားရှင်း၏စွမ်းဆောင်ရည်မှာတောင်ကွဲပြားခြားနားလိမ့်မည်။ ၎င်းသည် Cross-platform ဖြန့်ကျက်ရန်အတွက်ဖြစ်နိုင်ချေရှိသောအန္တရာယ်ဖြစ်သည်။
မသင့်တော်သောဆားတန်ဖိုးမရှိပါက crypt () ၏အပြုအမူကိုစနစ်ကဆုံးဖြတ်လိမ့်မည်။
ရိုးရာလူကိုအသုံးပြုခြင်း
ပုံမှန်အားဖြင့် hash algorithm ကိုသုံးပါ
တိုက်ရိုက်ပြန်လာရန်ပျက်ကွက်
ဆိုလိုသည်မှာ algorithm နှင့်ဆားတန်ဖိုးများကို code တွင်အတိအလင်းသတ်မှတ်ထားသောအခါပရိုဂရမ်၏အပြုအမူသည်စနစ်အကောင်အထည်ဖော်မှုအပေါ်တွင်မူတည်သည်။ အလွန်စိတ်မချရပါ။
တစ်ချိန်က developer တစ် ဦး သည် Laravel framework တွင်သုံးစွဲသူစကားဝှက်များကိုကိုယ်တိုင် စာ ဝှက်ရန်နှင့်ဒေတာဘေ့စ်ထဲသို့သိမ်းထားရန် Laravel framework တွင်အသုံးပြုသည်။ ပုံမှန်အားဖြင့် Code သည်ပုံမှန်အားဖြင့် Ubuntu Development Reject ပတ်ဝန်းကျင်တွင်ရှိသည်။ သို့သော် Alpine-based docker ကွန်တိန်နာတစ်ခုသို့နေရာချထားပြီးနောက်အသုံးပြုသူ login သည်အမြဲတမ်းပျက်ကွက်သည်။ အကြောင်းပြချက်မှာ Alpine တွင် Crypt () သည် ၎င်းတို့အား ဒေါ်လာ 2Y $ bcrypt algorithm ကိုမထောက်ပံ့ပါ။
ဤလိုက်ဖက်ခြင်းနှင့်သယ်ဆောင်နိုင်မှုပြ issues နာများကိုရှောင်ရှားရန်၎င်းကိုအကြံပြုသည် -
ဤလုပ်ဆောင်မှုများကို PHP 5.5 ကတည်းကစတင်မိတ်ဆက်ခဲ့ပြီး System's Crypt () အပြုအမူကိုမမှီခိုဘဲနောက်ခံအကောင်အထည်ဖော်မှုတွင်ပိုမိုကောင်းမွန်သော encapsulated ဖြစ်သည်။ နမူနာကုဒ်:
$hash = password_hash('mypassword', PASSWORD_BCRYPT);
if (password_verify('mypassword', $hash)) {
echo 'စကားဝှက်မှန်';
}
ဤနည်းလမ်းသည်အကောင်းဆုံး algorithm ကိုအလိုအလျောက်ရွေးချယ်ခြင်းကိုအလိုအလျောက်ရွေးချယ်ခြင်းသာမကစာဝှက်စနစ် parameters များကိုလည်းလက်တွေ့ကျကျအများဆုံးအကြံပြုသည့်အလေ့အကျင့်ဖြစ်သည်။
ဥပမာအားဖြင့် Target ပတ် 0 န်းကျင်သည် algorithm ကိုထောက်ခံကြောင်းသေချာစေပါ။
$salt = '$2y$10$' . substr(str_replace('+', '.', base64_encode(random_bytes(16))), 0, 22);
$hash = crypt('mypassword', $salt);
ပတ် 0 န်းကျင်ဆိုင်ရာကွဲပြားခြားနားမှုများကိုရှောင်ရှားရန်နေရာချထားခြင်းမပြုမီ target server ပေါ်တွင်မျိုးဆက်နှင့်စစ်ဆေးခြင်းလုပ်ငန်းစဉ်ကိုသေချာစွာစစ်ဆေးပါ။
ကွဲပြားခြားနားသောပတ်ဝန်းကျင်တွင်မူဝါဒများညှိနှိုင်းမှုကိုလွယ်ကူချောမွေ့စေရန် configuration files များသို့မဟုတ်ပတ် 0 န်းကျင်ဆိုင်ရာ variable များကို အသုံးပြု. စဉ်းစားပါ။
PHP တွင် Crypt () သည် အချိန်ကြာမြင့်စွာပတ် 0 န်းကျင်ရှိခဲ့သော်လည်း, Crypt () နှင့်ကြုံတွေ့ရသော "တွင်း" သည်အမှန်တကယ်စနစ်နှင့်လိုက်ဖက်ညီမှု၏ထင်ရှားမှုထင်ရှားသည်။ အကောင်းဆုံးဖြေရှင်းနည်းမှာ Password_Hash () ကဲ့သို့သောခေတ်မီ။ တည်ငြိမ်သောကျောက်မျက်များကိုအသုံးပြုရန်ဖြစ်သည်။
အကယ်. သင်သည်စနစ်အဟောင်းများကိုထိန်းသိမ်းထားဆဲသို့မဟုတ် crypt () ကို အထူးလိုအပ်ချက်များနှင့်အတူအသုံးပြုခြင်းသို့မဟုတ် crypt () ကိုအသုံးပြုနေပါက, operating ပတ် 0 န်းကျင်အားလုံးသည် encryption algorithm ကိုပိုမိုအထောက်အကူပြုရန်သေချာစေရန်သေချာစွာစစ်ဆေးပါ။
နောက်ထပ် debugging အတွက်, သင်ဝင်ရောက်ကြည့်ရှုနိုင်ပါတယ်:
https://m66.net/crypt-debug-tool (ကိရိယာစာမျက်နှာကိုတပ်ဖြန့်ချထားသည်)
သင်၏စီမံကိန်းတွင်စနစ်များတွင်စာဝှက်ခြင်းအပြုအမူကိုသင်၏စီမံကိန်းတွင် "အချိန်ဗုံး" ဖြစ်လာသည်။