လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> [PHP တွင်လုံခြုံသောဆားကိုထုတ်လုပ်ရန်။ သငျသညျသိရန်ရှိသည်မှန်လမ်း

[PHP တွင်လုံခြုံသောဆားကိုထုတ်လုပ်ရန်။ သငျသညျသိရန်ရှိသည်မှန်လမ်း

gitbox 2025-06-15

hash_pbkDF2 ကို စကားဝှက်စာဝှက်ခြင်းအတွက်အသုံးပြုသောအခါ ဆား သည်လုံခြုံစိတ်ချရသောအဓိကအစိတ်အပိုင်းဖြစ်သည်။ developer များစွာက Hash_pbkDF2 သည်စကားဝှက်ကိုအခြေခံသည့်သော့ချက် derivation function ကိုသိရှိထားသော်လည်း ဆားကို မည်သို့မှန်ကန်စွာနှင့်မည်သို့အသုံးပြုရမည်ကိုလျစ်လျူရှုကြသည်။ ဤဆောင်းပါးသည်အတိမ်အနက်ကို ဆား , ဘုံနားလည်မှုလွဲမှားခြင်းများနှင့် PHP ရှိလုံခြုံစိတ်ချရသော ဆားများကို ထုတ်လုပ်ရန်အကြံပြုထားသောအလေ့အကျင့်များကိုအသေးစိတ်ရှင်းပြပါမည်။

1 ။ အဘယ်ကြောင့် ဆား အလွန်အရေးကြီးသနည်း

ဆား ၏အခန်းကဏ် is သည်သက်တံ့စားပွဲဝိုင်းတိုက်ခိုက်မှုများနှင့်အတူတူပင် hash ထုတ်လုပ်ရန်တူညီသောစကားဝှက်ကိုကာကွယ်ရန်ဖြစ်သည်။ ဆား မရှိလျှင်တိုက်ခိုက်သူသည် Plaintext စကားဝှက်ကိုပြောင်းရန်စကားဝှက်-hash table သာလိုအပ်သည်။ ဆား ထည့်ခြင်းက encryption ကိုထူးခြားစေသည်။ အသုံးပြုသူများနှစ် ဦး သည်တူညီသောစကားဝှက်ကိုသတ်မှတ်ထားလျှင်ပင်သူတို့၏ hash တန်ဖိုးများသည်လုံးဝကွဲပြားခြားနားသည်။

2 ။ HASH_PBKDF2 မှမိတ်ဆက်

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 ၏ထူးခြားမှုကိုမြှင့်တင်ရန်အသုံးပြုသည်။ ထို့ကြောင့်၎င်းသည်ထုတ်လုပ်သည့်ပုံစံသည်အလွန်အရေးကြီးသည်။

3 ။ သာမန်အမှားများ

  1. 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 တန်ဖိုးများကိုထပ်ခါတလဲလဲပြုလုပ်နိုင်သည်။

  2. ရိုးရှင်းသောလုပ်ဆောင်ချက်များကို အသုံးပြု. ဖန်တီးခြင်း -

    ဥပမာ, 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 မလုံလောက်သော်လည်းလုံခြုံရေးအတွက်အကြံပြုထားခြင်းမရှိပါ။

4 ။ လုံခြုံစွာ ဆား ထုတ်လုပ်ရန်မှန်ကန်သောနည်းလမ်း

ဆား ထုတ်လုပ်ရန် 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>

5 ။ ပြီးပြည့်စုံသောအသုံးပြုမှုဥပမာ

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> =&gt; </span><span><span class="hljs-variable">$salt</span></span><span>,
        </span><span><span class="hljs-string">'hash'</span></span><span> =&gt; </span><span><span class="hljs-variable">$hash</span></span><span>,
        </span><span><span class="hljs-string">'algo'</span></span><span> =&gt; </span><span><span class="hljs-variable">$algo</span></span><span>,
        </span><span><span class="hljs-string">'iterations'</span></span><span> =&gt; </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>

6 ။ စကားဝှက်ကိုဘယ်လိုအတည်ပြုရမလဲ။

စကားဝှက်ကိုအတည်ပြုသည့်အခါမူရင်း ဆား , ကြားကာလများ နှင့် 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 များကိုနှိုင်းယှဉ်သောအခါလုံခြုံသောရွေးချယ်မှုဖြစ်သည်။

7 ။ နိဂုံးချုပ်

Hash_pbkDF2 ကို အန္တရာယ်ကင်းစွာအသုံးပြုရန်သော့ချက်မှာခိုင်ခံ့သောကျပန်း ဆား ထုတ်လုပ်ရန်နှင့်လုံလောက်သောအရေအတွက်ကိုသတ်မှတ်ရန်ဖြစ်သည်။ static သို့မဟုတ်အနိမ့်ပိုင်းခြားနေသော ဆား မသုံးပါနှင့်, မဟုတ်ရင် encryption လုပ်ငန်းစဉ်တစ်ခုလုံး၏လုံခြုံရေးကိုဖျက်ဆီးလိမ့်မည်။ စကားဝှက်လုံခြုံရေးနယ်ပယ်တွင် "လုပ်ပါ" ဟုမခေါ်နိုင်ပါ။ အသေးစိတ်တိုင်းသည်အလေးအနက်ထားသင့်သည်။ ပိုမိုလုံခြုံသော PHP application တစ်ခုတည်ဆောက်ရန်အတွက်ဤဆောင်းပါးသည် hash_pbkdf2 တွင်မှန်ကန်သော မျိုးဆက် မျိုးဆက်များကိုနားလည်ရန်ဤဆောင်းပါးသည်သင့်အားပိုမိုလုံခြုံသော PHP application ကိုတည်ဆောက်ရန်ကူညီနိုင်သည်ဟုကျွန်ုပ်မျှော်လင့်ပါသည်။