hash_pbkDF2 ကို စကားဝှက်စာဝှက်ခြင်းအတွက်အသုံးပြုသောအခါ ဆား သည်လုံခြုံစိတ်ချရသောအဓိကအစိတ်အပိုင်းဖြစ်သည်။ developer များစွာက Hash_pbkDF2 သည်စကားဝှက်ကိုအခြေခံသည့်သော့ချက် derivation function ကိုသိရှိထားသော်လည်း ဆားကို မည်သို့မှန်ကန်စွာနှင့်မည်သို့အသုံးပြုရမည်ကိုလျစ်လျူရှုကြသည်။ ဤဆောင်းပါးသည်အတိမ်အနက်ကို ဆား , ဘုံနားလည်မှုလွဲမှားခြင်းများနှင့် PHP ရှိလုံခြုံစိတ်ချရသော ဆားများကို ထုတ်လုပ်ရန်အကြံပြုထားသောအလေ့အကျင့်များကိုအသေးစိတ်ရှင်းပြပါမည်။
ဆား ၏အခန်းကဏ် is သည်သက်တံ့စားပွဲဝိုင်းတိုက်ခိုက်မှုများနှင့်အတူတူပင် hash ထုတ်လုပ်ရန်တူညီသောစကားဝှက်ကိုကာကွယ်ရန်ဖြစ်သည်။ ဆား မရှိလျှင်တိုက်ခိုက်သူသည် Plaintext စကားဝှက်ကိုပြောင်းရန်စကားဝှက်-hash table သာလိုအပ်သည်။ ဆား ထည့်ခြင်းက encryption ကိုထူးခြားစေသည်။ အသုံးပြုသူများနှစ် ဦး သည်တူညီသောစကားဝှက်ကိုသတ်မှတ်ထားလျှင်ပင်သူတို့၏ hash တန်ဖိုးများသည်လုံးဝကွဲပြားခြားနားသည်။
PHP ၏ hash_pbkdf2 function ရှေ့ပြေးပုံစံသည်အောက်ပါအတိုင်းဖြစ်သည် -
<span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-title function_ invoke__">hash_pbkdf2</span></span><span> (
</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$algo</span></span><span>,
</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$password</span></span><span>,
</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$salt</span></span><span>,
</span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$iterations</span></span><span>,
</span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$length</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>,
</span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-variable">$binary</span></span><span> = </span><span><span class="hljs-literal">false</span></span><span>
)
</span></span>
$ ဆားငန်သော parameter သည် hash ၏ထူးခြားမှုကိုမြှင့်တင်ရန်အသုံးပြုသည်။ ထို့ကြောင့်၎င်းသည်ထုတ်လုပ်သည့်ပုံစံသည်အလွန်အရေးကြီးသည်။
fixed string ကိုဆားအဖြစ်သုံးပါ။
<span><span><span class="hljs-variable">$salt</span></span><span> = </span><span><span class="hljs-string">'123456'</span></span><span>;
</span></span>
ဒါကအရမ်းအန္တရာယ်ရှိတဲ့အပြုအမူပါ။ Fixed ဆား ဆိုသည်မှာသုံးစွဲသူများအားလုံးအတွက် hash တန်ဖိုးများကိုထပ်ခါတလဲလဲပြုလုပ်နိုင်သည်။
ရိုးရှင်းသောလုပ်ဆောင်ချက်များကို အသုံးပြု. ဖန်တီးခြင်း -
ဥပမာ, UNIQID () နှင့် MT_rand ကဲ့သို့သောလုပ်ဆောင်ချက်များသည်ကျပန်းမလုံလောက်ပါသို့မဟုတ်ခန့်မှန်းနိုင်သည်။
<span><span><span class="hljs-variable">$salt</span></span><span> = </span><span><span class="hljs-title function_ invoke__">uniqid</span></span><span>();
</span></span>
ထူးခြားနေပုံရသောကြောင့်၎င်းသည်လုံလောက်သော unropy မလုံလောက်သော်လည်းလုံခြုံရေးအတွက်အကြံပြုထားခြင်းမရှိပါ။
ဆား ထုတ်လုပ်ရန် PHP - ထောက်ပံ့ထားသောစာဝှက်စနစ်လုံခြုံရေးအဆင့်လုပ်ဆောင်ချက်များကိုအသုံးပြုရန်အကြံပြုသည်။
<span><span><span class="hljs-variable">$salt</span></span><span> = </span><span><span class="hljs-title function_ invoke__">random_bytes</span></span><span>(</span><span><span class="hljs-number">16</span></span><span>); </span><span><span class="hljs-comment">// 16 ဒရယ် = 128 မြင်းဇက်ကြိုး</span></span><span>
</span></span>
အကယ်. ၎င်းကို string တစ်ခုအနေဖြင့်သိမ်းဆည်းရန်လိုအပ်ပါက (ဥပမာအားဖြင့်၎င်းကိုဒေတာဘေ့စ်သို့သိမ်းပါ) သင် bin2hex () သို့မဟုတ် base64_encode () ကို encode လုပ်ရန်သင်အသုံးပြုနိုင်သည်။
<span><span><span class="hljs-variable">$salt</span></span><span> = </span><span><span class="hljs-title function_ invoke__">bin2hex</span></span><span>(</span><span><span class="hljs-title function_ invoke__">random_bytes</span></span><span>(</span><span><span class="hljs-number">16</span></span><span>)); </span><span><span class="hljs-comment">// 32 ဇာတ်ကောင်များ၏ hexadecimal string ကို</span></span><span>
</span></span>
hash_pbkdf2 ကို အသုံးပြု. စကားဝှက်များကိုလုံလုံခြုံခြုံ encrypt လုပ်နည်းနှင့် ပတ်သက်. ဤတွင်ပြည့်စုံသောဥပမာတစ်ခုဖြစ်သည်။
<span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">hashPassword</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$password</span></span></span><span>) {
</span><span><span class="hljs-variable">$salt</span></span><span> = </span><span><span class="hljs-title function_ invoke__">bin2hex</span></span><span>(</span><span><span class="hljs-title function_ invoke__">random_bytes</span></span><span>(</span><span><span class="hljs-number">16</span></span><span>)); </span><span><span class="hljs-comment">// လုံခြုံအောင်ထုတ်လုပ်ပါ salt</span></span><span>
</span><span><span class="hljs-variable">$iterations</span></span><span> = </span><span><span class="hljs-number">100000</span></span><span>;
</span><span><span class="hljs-variable">$algo</span></span><span> = </span><span><span class="hljs-string">'sha256'</span></span><span>;
</span><span><span class="hljs-variable">$length</span></span><span> = </span><span><span class="hljs-number">64</span></span><span>;
</span><span><span class="hljs-variable">$hash</span></span><span> = </span><span><span class="hljs-title function_ invoke__">hash_pbkdf2</span></span><span>(</span><span><span class="hljs-variable">$algo</span></span><span>, </span><span><span class="hljs-variable">$password</span></span><span>, </span><span><span class="hljs-variable">$salt</span></span><span>, </span><span><span class="hljs-variable">$iterations</span></span><span>, </span><span><span class="hljs-variable">$length</span></span><span>, </span><span><span class="hljs-literal">false</span></span><span>);
</span><span><span class="hljs-keyword">return</span></span><span> [
</span><span><span class="hljs-string">'salt'</span></span><span> => </span><span><span class="hljs-variable">$salt</span></span><span>,
</span><span><span class="hljs-string">'hash'</span></span><span> => </span><span><span class="hljs-variable">$hash</span></span><span>,
</span><span><span class="hljs-string">'algo'</span></span><span> => </span><span><span class="hljs-variable">$algo</span></span><span>,
</span><span><span class="hljs-string">'iterations'</span></span><span> => </span><span><span class="hljs-variable">$iterations</span></span><span>
];
}
</span><span><span class="hljs-comment">// ဥပမာအသုံးပြုမှု</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">hashPassword</span></span><span>(</span><span><span class="hljs-string">'MySecretPassword'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span></span>
စကားဝှက်ကိုအတည်ပြုသည့်အခါမူရင်း ဆား , ကြားကာလများ နှင့် algo များကို ဒေတာဘေ့စ်မှဖတ်ရန်လိုအပ်သည်။
<span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">verifyPassword</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$password</span></span></span><span>, </span><span><span class="hljs-variable">$storedHash</span></span><span>, </span><span><span class="hljs-variable">$salt</span></span><span>, </span><span><span class="hljs-variable">$iterations</span></span><span>, </span><span><span class="hljs-variable">$algo</span></span><span> = </span><span><span class="hljs-string">'sha256'</span></span><span>, </span><span><span class="hljs-variable">$length</span></span><span> = </span><span><span class="hljs-number">64</span></span><span>) {
</span><span><span class="hljs-variable">$hash</span></span><span> = </span><span><span class="hljs-title function_ invoke__">hash_pbkdf2</span></span><span>(</span><span><span class="hljs-variable">$algo</span></span><span>, </span><span><span class="hljs-variable">$password</span></span><span>, </span><span><span class="hljs-variable">$salt</span></span><span>, </span><span><span class="hljs-variable">$iterations</span></span><span>, </span><span><span class="hljs-variable">$length</span></span><span>, </span><span><span class="hljs-literal">false</span></span><span>);
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">hash_equals</span></span><span>(</span><span><span class="hljs-variable">$storedHash</span></span><span>, </span><span><span class="hljs-variable">$hash</span></span><span>);
}
</span></span>
Hash_equals များသည် အချိန်ကိုက်တိုက်ခိုက်မှုများကိုကာကွယ်နိုင်ပြီး hash များကိုနှိုင်းယှဉ်သောအခါလုံခြုံသောရွေးချယ်မှုဖြစ်သည်။
Hash_pbkDF2 ကို အန္တရာယ်ကင်းစွာအသုံးပြုရန်သော့ချက်မှာခိုင်ခံ့သောကျပန်း ဆား ထုတ်လုပ်ရန်နှင့်လုံလောက်သောအရေအတွက်ကိုသတ်မှတ်ရန်ဖြစ်သည်။ static သို့မဟုတ်အနိမ့်ပိုင်းခြားနေသော ဆား မသုံးပါနှင့်, မဟုတ်ရင် encryption လုပ်ငန်းစဉ်တစ်ခုလုံး၏လုံခြုံရေးကိုဖျက်ဆီးလိမ့်မည်။ စကားဝှက်လုံခြုံရေးနယ်ပယ်တွင် "လုပ်ပါ" ဟုမခေါ်နိုင်ပါ။ အသေးစိတ်တိုင်းသည်အလေးအနက်ထားသင့်သည်။ ပိုမိုလုံခြုံသော PHP application တစ်ခုတည်ဆောက်ရန်အတွက်ဤဆောင်းပါးသည် hash_pbkdf2 တွင်မှန်ကန်သော မျိုးဆက် မျိုးဆက်များကိုနားလည်ရန်ဤဆောင်းပါးသည်သင့်အားပိုမိုလုံခြုံသော PHP application ကိုတည်ဆောက်ရန်ကူညီနိုင်သည်ဟုကျွန်ုပ်မျှော်လင့်ပါသည်။