လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Openssl_Sign နှင့် Hash_final ဒီဂျစ်တယ်လက်မှတ်ဘယ်လိုလဲ။

Openssl_Sign နှင့် Hash_final ဒီဂျစ်တယ်လက်မှတ်ဘယ်လိုလဲ။

gitbox 2025-05-26

PHP တွင်ဒစ်ဂျစ်တယ်လက်မှတ်များသည်အချက်အလက်သမာဓိနှင့်အထောက်အထားကိုစစ်ဆေးခြင်းကိုသေချာစေရန်အရေးကြီးသောနည်းလမ်းများဖြစ်သည်။ ဒေတာ (ဆေးထည့်ခြင်း) ကိုအစာကြေ။ စာဝှက်ခြင်းဖြင့်စာဝှက်ခြင်းဖြင့် private key ဖြင့်စာဝှက်ခြင်းဖြင့်ပေးပို့သူသည်အချက်အလက်များကိုကိုယ်တိုင်ကိုယ်ကျပို့ဆောင်ခြင်းနှင့်ထုတ်လွှင့်စဉ်အတွင်းနှင့်အတူအနှောင့်အယှက်မပေးနိုင်ကြောင်းသက်သေပြနိုင်သည်။ ဒီဆောင်းပါးက Hash_final နဲ့ Opensslsl_Ssign ကိုပေါင်းစပ်ပြီးဒီဂျစ်တယ်လက်မှတ်ရေးထိုးမှုဖြစ်စဉ်ကိုအကောင်အထည်ဖော်ရန်မည်သို့ပေါင်းစပ်ရမည်ကိုအသေးစိတ်ရှင်းပြပါလိမ့်မည်။

1 ။ အခြေခံသဘောတရားများကိုပြန်လည်သုံးသပ်ခြင်း

1 ။ hash စီးရီးလုပ်ဆောင်ချက်များကို

Hash_init , hash_update နှင့် hash_final အပါအ 0 င် hash အစာတန်များထုတ်လုပ်ရန်အတွက် PHP သည်လုပ်ငန်းဆောင်တာများကိုထောက်ပံ့ပေးသည်။ ဤလုပ်ဆောင်ချက်များသည် streaming operations များကိုထောက်ပံ့ပေးပြီးဖိုင်ကြီးများသို့မဟုတ်အစိတ်အပိုင်းများတွင်ကူးစက်သောအချက်အလက်များကိုလုပ်ဆောင်ရန်အတွက်သင့်တော်ပါသည်။

2 ။ openssl_sign function ကို

OpenSSL_Sign သည် datafible encryption digest ထုတ်လုပ်ရန်အချက်အလက်များကိုလက်မှတ်ရေးထိုးရန် private key ကိုအသုံးပြုသည်။ လက်မှတ်ရေးထိုးထားသောအချက်အလက်များကို public key ကို အသုံးပြု. အတည်ပြုနိုင်သည်။

2 ။ လုပ်ငန်းစဉ်အဆင့်များကိုလက်မှတ်ထိုးခြင်း

ကျွန်ုပ်တို့သည်ရိုးရှင်းသောဇာတ်လမ်းတစ်ပုဒ်တွင်ပြသပါမည်။

1 ။ Hash အခြေအနေကိုစတင်ပါ

 $context = hash_init('sha256');

ဤတွင်ကျွန်ုပ်တို့သည် Sha-256 algorithm ကိုသုံးသည်။ အမှန်တကယ်လိုအပ်ချက်များအပေါ် အခြေခံ. အခြား algorithms များကိုလည်းသင်ရွေးချယ်နိုင်သည်။

2 ။ အပိုင်းများရှိဒေတာများကို update လုပ်ပါ (ကြီးမားသောဒေတာများပြုလုပ်ခြင်းကိုတုပ)

 $dataParts = [
    'ပထမစာပိုဒ်,ဖြစ်ကောင်း uploaded ဖိုင်၏အစိတ်အပိုင်းတစ်ခုကနေ。',
    'ဒုတိယစာပိုဒ်,ဖြစ်ကောင်း streaming သို့မဟုတ် logging ၏အစိတ်အပိုင်းတစ်ခု。',
    'နောက်ဆုံးအပိုဒ်,ပြီးပြည့်စုံသောဒေတာပိတ်ပင်တားဆီးမှုဖွဲ့စည်း。'
];

foreach ($dataParts as $part) {
    hash_update($context, $part);
}

ဤကုဒ်သည်ကြီးမားသောအချက်အလက်များ၏အပြောင်းအလဲနဲ့နည်းလမ်းကိုထည့်သွင်းပြီး ,

3 ။ နောက်ဆုံးအကျဉ်းချုပ်ကိုထုတ်ပေးပါ

 $finalDigest = hash_final($context, true); // မူရင်း binary format ကိုအသုံးပြုခြင်း

Signature အတွက်မူလ binary data ကိုရနိုင်အောင်ဒုတိယ parameter ကိုစစ်မှန်တဲ့အချက်ကို စစ်မှန်တဲ့ အချက်ကိုသတိပြုပါ။

4 ။ ပုဂ္ဂလိကသော့ဖြင့်လက်မှတ်ထိုးပါ

 $privateKey = file_get_contents('/path/to/private_key.pem');
$pkeyid = openssl_pkey_get_private($privateKey);

if (!$pkeyid) {
    die('ပုဂ္ဂလိကသော့ချက်တင်ခြင်းမအောင်မြင်ပါ');
}

$signature = '';
if (!openssl_sign($finalDigest, $signature, $pkeyid, OPENSSL_ALGO_SHA256)) {
    die('လက်မှတ်မအောင်မြင်ပါ');
}

openssl_free_key($pkeyid);

ဤတွင်အစာကြေငြာချက်ကို Openssl_Sign မှတဆင့် private key ကို သုံး. algorithm ကိုသတ်မှတ်သည် (Sha-256) ကိုသတ်မှတ်ထားသည်။

5 ။ လုံခြုံစွာလက်မှတ်ထုတ်လွှင့်ခြင်းသို့မဟုတ်သိမ်းဆည်းခြင်း

URLS, JSON, JSON သို့မဟုတ်အခြား binary chinary thanks များတွင်လွယ်ကူသောထုတ်လွှင့်ရန်အတွက် SIFFARE64 ကိုသင် base64 ကို encoding လုပ်နိုင်သည်။

 $encodedSignature = base64_encode($signature);
echo "အဖြစ်လက်မှတ်ရေးထိုးခဲ့သည်: " . $encodedSignature;

3 ။ လက်မှတ်အတည်ပြုခြင်း (optional)

လက်မှတ်ကိုအတည်ပြုရန်နှင့်သက်ဆိုင်သော public key နှင့် openssll_Verify ကို အသုံးပြုနိုင်သည်။

 $publicKey = file_get_contents('https://gitbox.net/keys/public_key.pem');
$pubkeyid = openssl_pkey_get_public($publicKey);

$isValid = openssl_verify($finalDigest, base64_decode($encodedSignature), $pubkeyid, OPENSSL_ALGO_SHA256);

if ($isValid === 1) {
    echo "လက်မှတ်အတည်ပြုအောင်မြင်မှုအောင်မြင်ခဲ့သည်";
} elseif ($isValid === 0) {
    echo "မမှန်ကန်သောလက်မှတ်";
} else {
    echo "အတည်ပြုခြင်းလုပ်ငန်းစဉ်တွင်အမှားတစ်ခုဖြစ်ပွားခဲ့သည်";
}

4 ။ အကျဉ်းချုပ်

Openssl_Sign ဖြင့် Hash_init / hash_update / hash_final ကိုပေါင်းစပ်ခြင်းအားဖြင့်ကျွန်ုပ်တို့သည် opensssl_sign နှင့်အတူပိုမိုလုံခြုံသောဒစ်ဂျစ်တယ်လက်မှတ်ရေးယန္တရားကိုအကောင်အထည်ဖော်နိုင်သည်။ ဤနည်းလမ်းသည်အချက်အလက်ကြီးများကိုအစိတ်အပိုင်းများတွင်လုပ်ဆောင်ရန်လိုအပ်သည့်အခြေအနေများအတွက်အထူးသဖြင့်သင့်လျော်သည်။ ပုဂ္ဂလိကသော့များ၏လုံခြုံရေးကိုကာကွယ်ရန်နှင့်ထုတ်လွှင့်နေစဉ်အချက်အလက်များကိုလက်မှတ်ရေးထိုးရန်မမေ့ပါနှင့်။