လျှောက်လွှာများစွာတွင်ဖိုင်၏သမာဓိကိုစစ်ဆေးရန်အလွန်အရေးကြီးသည်။ အထူးသဖြင့်သင်ဖိုင်တစ်ခုကိုဒေါင်းလုတ်လုပ်ရန် (သို့) တင်ရန်လိုအပ်သည့်အခါဖိုင်ကိုအနှောင့်အယှက်မဖြစ်စေရန်သေချာစေရန်အလွန်အရေးကြီးသည်။ PHP သည် hash_update_stream နှင့် hash_equals () တွင်အသုံးများသောလုပ်ဆောင်ချက်နှစ်ခုဖြစ်သော Hash Checks စစ်ဆေးမှုများပြုလုပ်ရန်နည်းလမ်းအမျိုးမျိုးကိုထောက်ပံ့ပေးသည်။
ဖိုင်ကိုတဖြည်းဖြည်းဖတ်ရန်နှင့် hash တန်ဖိုးကိုတွက်ချက်ရန် hash_update_stream function ကိုမည်သို့အသုံးပြုရမည်ကိုဤဆောင်းပါးသည်ဖိုင်၏သမာဓိကိုစစ်ဆေးရန်မျှော်လင့်ထားသည့် hash တန်ဖိုးကိုနှိုင်းယှဉ်ရန် hash_equals () function ကိုသုံးပါလိမ့်မည်။
Hash_update_stream : ဒီ function ကို data stream ၏ hash တန်ဖိုးကိုတွက်ချက်ရန်အသုံးပြုသည်။ ကြီးမားသောဖိုင်များကိုပြုပြင်သည့်အခါမှတ်ဥာဏ်လျှံပြ problem နာကိုအတုံးအတွင်းရှိဖိုင်များဖတ်ရှုခြင်းနှင့် Hash တန်ဖိုးကိုတဖြည်းဖြည်းချင်းအသစ်ပြောင်းခြင်းအားဖြင့်မှတ်ဥာဏ်လျှံခြင်းပြ problem နာကိုထိရောက်စွာရှောင်ရှားနိုင်သည်။
Hash_equals : ဒီဟာဟာ hash တန်ဖိုးနှစ်ခုကိုနှိုင်းယှဉ်ဖို့လုံခြုံတဲ့ function တစ်ခုပါ။ ၎င်းသည်အချိန်ကာလကိုတိုက်ခိုက်မှုများကိုကာကွယ်ပေးပြီး == သို့မဟုတ် = == ကိုအသုံးပြုခြင်းထက်ပိုမိုလုံခြုံသည်။ အဘယ်ကြောင့်ဆိုသော် Hash တန်ဖိုးများကြောင့်အချိန်ကွာခြားမှုကြောင့်အချိန်ကွာခြားချက်ကိုမဖော်ပြပါ။
သင့်တွင်ဖိုင်တစ်ခုရှိပြီးမျှော်လင့်ထားသည့် hash vere တစ်ခုရှိသည်ဟုယူဆသည်, သင်ဖိုင်၏သမာဓိကိုအောက်တွင်ဖော်ပြထားသောအဆင့်များကိုလိုက်နာလိုသည်။
ပထမ ဦး စွာကျွန်ုပ်တို့သည်အတည်ပြုရန်ဖိုင်ကိုဖွင့်ရန်လိုအပ်သည်။ စာဖတ်ခြင်းအတွက်ဖိုင်ကိုဖွင့်ရန် fopen () ကိုသုံးနိုင်သည်။
$file = fopen('path/to/your/file', 'rb');
ထို့နောက် hash အခြေအနေကိုစတင်ရန် Hash_init () ကို သုံးပါ။ Sha256 ကို ဒီမှာဥပမာတစ်ခုအဖြစ်ယူပါ။ ဟုတ်ပါတယ်, အခြား MD5 , Sha512 စသဖြင့်အခြား hashing algorithms များကိုလည်းအသုံးပြုနိုင်သည်။
$hashContext = hash_init('sha256');
ဖိုင်ကိုအတုံးများဖြင့်ဖတ်ပြီး block တစ်ခုစီ၏အချက်အလက်များကို hash_update_stream () function မှတဆင့် hash context သို့ data ကို update လုပ်ပါ။
while (!feof($file)) {
$data = fread($file, 8192); // ဖတ်8KBဒေတာလုပ်ကွက်
hash_update_stream($hashContext, $data);
}
ဖိုင်ကိုဖတ်ပြီးနောက် calculated file hash value ကိုရယူရန် hash_final () ကို သုံးပါ။
$fileHash = hash_final($hashContext);
နောက်ဆုံးတွင်ကျွန်ုပ်တို့သည် hash_equals () တွက်ချက်ထားသောဖိုင် hash တန်ဖိုးကိုမျှော်လင့်ထားသည့် Hash တန်ဖိုးကိုလုံခြုံစွာနှိုင်းယှဉ်ရန်မျှော်လင့်ထားသည့် Hash Value ကိုလုံခြုံစွာနှိုင်းယှဉ်ရန်အသုံးပြုသည်။
$expectedHash = 'မျှော်လင့်ထား hash တန်ဖိုး'; // သင်သည်ဤ hash တန်ဖိုးကိုဆာဗာသို့မဟုတ်အခြားလုံခြုံသောနေရာမှရနိုင်သည်
if (hash_equals($fileHash, $expectedHash)) {
echo "ဖိုင်ပြည့်စုံ,hash တန်ဖိုးကိုက်ညီမှု!";
} else {
echo "ဖိုင်များအကျင့်ပျက်ခြစားမှုသို့မဟုတ်နှောင့်အယှက်နေကြသည်,Hash တန်ဖိုးများနှင့်မကိုက်ညီပါ!";
}
ဤတွင်အပြည့်အဝနမူနာကုဒ်ဖြစ်ပါတယ်:
<?php
// ဖိုင်ကိုဖွင့်ပါ
$file = fopen('path/to/your/file', 'rb');
if (!$file) {
die('无法ဖိုင်ကိုဖွင့်ပါ');
}
// Hash အခြေအနေကိုစတင်ပါ
$hashContext = hash_init('sha256');
// 逐步ဖတ်文件并更新哈希值
while (!feof($file)) {
$data = fread($file, 8192);
hash_update_stream($hashContext, $data);
}
// ဖိုင်၏ hash တန်ဖိုးကိုရယူပါ
$fileHash = hash_final($hashContext);
// မျှော်လင့်ထား hash တန်ဖိုး
$expectedHash = 'မျှော်လင့်ထား hash တန်ဖိုး'; // ဥပမာအားဖြင့်,'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
// Hash တန်ဖိုးများကိုနှိုင်းယှဉ်
if (hash_equals($fileHash, $expectedHash)) {
echo "ဖိုင်ပြည့်စုံ,hash တန်ဖိုးကိုက်ညီမှု!";
} else {
echo "ဖိုင်များအကျင့်ပျက်ခြစားမှုသို့မဟုတ်နှောင့်အယှက်နေကြသည်,Hash တန်ဖိုးများနှင့်မကိုက်ညီပါ!";
}
// ဖိုင်ကိုပိတ်ပါ
fclose($file);
?>