PHP တွင် hash_final သည် hash_init နှင့် hash_update တို့ ဖြင့်အသုံးပြုသောအရေးကြီးသောလုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ ၎င်းသည်အဓိကအားဖြင့် data များ၏သမာဓိကိုအတည်ပြုရန် Hash Digests (လက်မှတ်ထိုးခြင်း) ကိုထုတ်လုပ်ရန်အဓိကအားဖြင့်အသုံးပြုသည်။ ဤဆောင်းပါးသည် hash_final ကို မည်သို့မှန်ကန်စွာအသုံးပြုရမည်ကိုအသေးစိတ်ရှင်းပြပါမည်။
Hash_Final သည် PHP မှပေးသော hash extension တွင်လုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ ၎င်း၏အခြေခံအလုပ်ခွင်မှာအောက်ပါအတိုင်းဖြစ်သည် -
hash_init ကိုသုံးပြီး hash အခြေအနေကိုစတင်ပါ။
ashed ကိုအခြေအနေတွင်ထည့်ရန်လိုအပ်သည့်အချက်အလက်များကိုဖြည့်စွက်ရန် hash_update ကို သုံးရန် (ကြီးမားသောဒေတာလုပ်ကွက်များပြုလုပ်ရန်အကြိမ်ပေါင်းများစွာဟုခေါ်သည်) ။
နောက်ဆုံး hash value ကိုရရှိရန် Hash_Final ကို သုံးပါ။
ဤအဆင့်ဆင့်ချဉ်းကပ်နည်းသည်အထူးသဖြင့်ကြီးမားသောဖိုင်များသို့မဟုတ် streaming data များကိုကိုင်တွယ်ရန်သင့်တော်သည်, အကြောင်းမှာသင်သည်အကြောင်းအရာတစ်ခုလုံးကိုမှတ်ဉာဏ်ထဲသို့ 0 င်ရန်မလိုအပ်ပါ။
မက်ဆေ့ခ်ျတစ်ခုကိုလက်မှတ်ထိုးတုပထားသောရိုးရှင်းသောဥပမာကိုကြည့်ကြစို့။
<?php
$message = 'ဤသည်လက်မှတ်ထိုးရန်လိုအပ်သောမက်ဆေ့ခ်ျကိုဖြစ်ပါတယ်';
$algo = 'sha256';
// Hash အခြေအနေကိုစတင်ပါ
$context = hash_init($algo);
// Hash အခြေအနေကို Update လုပ်ပါ,ဒေတာကိုအကြိမ်ပေါင်းများစွာထည့်သွင်းနိုင်ပါတယ်
hash_update($context, $message);
// နောက်ဆုံးလက်မှတ်ကိုရယူပါ(အကျဉ်းချုပ်)
$signature = hash_final($context);
// output လက်မှတ်လက်မှတ်
echo "လက်မှတ်ရေးထိုး: " . $signature . "\n";
?>
ဤဥပမာတွင်ကျွန်ုပ်တို့သည် SHA256 algorithm ကိုမက်ဆေ့ခ်ျတစ်ခုအစာကြေရန်အတွက် shi256 algorithm ကိုအသုံးပြုသည်။ output သည် hexadecimal encoded encoded hash တန်ဖိုးကိုလက်ခံရရှိသောအဆုံးတွင်သတင်းစကား၏သမာဓိကိုစစ်ဆေးရန်အသုံးပြုနိုင်သည်။
လက်မှတ်တစ်ခုကိုထုတ်လုပ်ခြင်းသည်မလုံလောက်ပါ, သော့သည်လက်မှတ်ကိုမည်သို့ အတည်ပြုရမည် နည်း။ အပြည့်အဝဖြစ်စဉ်ကိုများသောအားဖြင့်အောက်ပါအဆင့်များပါဝင်သည် -
1 ?? ပို့ပါ
လက်မှတ်ထုတ်ပေးသည်။
မက်ဆေ့ခ်ျနှင့်လက်မှတ်ကိုလက်ခံရန်လက်မှတ်ပို့ပါ။
2 ?? လက်ခံသူ :
မက်ဆေ့ခ်ျကိုလက်ခံရရှိခဲ့သည်။
တူညီသော algorithm ကိုအသုံးပြုပြီးမက်ဆေ့ခ်ျ၏လက်မှတ်ကိုပြန်လည်ရယူပါ။
လက်ခံရရှိလက်မှတ်ကိုတွက်ချက်လက်မှတ်နှင့်ကိုက်ညီမှုရှိမရှိနှိုင်းယှဉ်။
Code Sign (လက်ခံအတည်ပြုခြင်း):
<?php
$received_message = 'ဤသည်လက်မှတ်ထိုးရန်လိုအပ်သောမက်ဆေ့ခ်ျကိုဖြစ်ပါတယ်';
$received_signature = '发送端提供的လက်မှတ်ရေးထိုး';
$algo = 'sha256';
// 重新计算လက်မှတ်ရေးထိုး
$context = hash_init($algo);
hash_update($context, $received_message);
$calculated_signature = hash_final($context);
// 比较လက်မှတ်ရေးထိုး
if (hash_equals($received_signature, $calculated_signature)) {
echo "မက်ဆေ့ခ်ျကိုပြည့်စုံသည်,နှင့်အတူအနှောင့်အယှက်မ。\n";
} else {
echo "အသိပေး:မက်ဆေ့ခ်ျကိုနှင့်အတူအနှောင့်အယှက်ဖြစ်ခဲ့ကြပေမည်!\n";
}
?>
? မှတ်စု : hash_equals များကို အသုံးပြုခြင်းအစား signatures များကိုနှိုင်းယှဉ်ရန် == ကို နှိုင်းယှဉ်ကြည့်ပါ။
အသုံးပြုသူကို https://gitbox.net/download/fileload/filepile.zip မှဖိုင်တစ်ခုကို download လုပ်ရန်လိုသည်ဆိုပါစို့။ အတည်ပြုရန် hash value ကိုသင်လုပ်နိုင်သည်။
<?php
$file = 'file.zip';
$algo = 'sha256';
// Open File streaming
$context = hash_init($algo);
$handle = fopen($file, 'rb');
while (!feof($handle)) {
$data = fread($handle, 8192);
hash_update($context, $data);
}
fclose($handle);
// 获取文件的လက်မှတ်ရေးထိုး(hash တန်ဖိုး)
$hash = hash_final($context);
echo "link ကို download လုပ်ပါ: https://gitbox.net/download/file.zip\n";
echo "ဖိုင်ဆေးရုံ(သမာဓိကိုစစ်ဆေးရန်အသုံးပြုခဲ့သည်): $hash\n";
?>
Downloaders သည် download လုပ်ထားသောဖိုင် hash တန်ဖိုးကိုတွက်ချက်ရန်တူညီသော algorithm ကိုသုံးနိုင်သည်။ ၎င်းသည်ထောက်ပံ့ပေးသည့်တန်ဖိုးနှင့်ကိုက်ညီမှုရှိကြောင်းသေချာစေရန်ဖိုင်ပြီးစီးခြင်းနှင့်အနှောင့်အယှက်မဖြစ်နိုင်ကြောင်းအတည်ပြုခြင်းနှင့်အတူဖြည့်ဆည်းခြင်းမရှိသေးပါ။