سلام وقت بخیر
یه قطعه کد هست به دو زبان پایتون و نود جی اس
میخواستم ببینم کسی میتونه راهنمایی کنه که چجوری مشابه همین کار رو توی php انجام بدم؟
متغیر bodyData به عنوان json و privateKey هم یه متغییر که یه کلید خصوصی هست که به عنوان ورودی داده میشه
این هم توضیح :
جهت صحت سنجی عملیات ، باید از داده های ارسالی ، به همراه کلید خصوصی توسط الگوریتم درهم ساز 1-SHA ، یک امضا (Signature) ساخته شود و درنهایت این امضا باید به صورت base64 انکد شود.
نودجیاس
const crypto=require('crypto');
signData=function(bodyData){
const sign=crypto.createSign("SHA1",'utf8');
sign.update(JSON.stringify(bodyData));
sign.end();
const signature=sign.sign(privateKey);
return signature.toString('base64');
}
پایتون
from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import SHA
from base64 import b64encode
rsakey = RSA.importKey(pkey)
signer = PKCS1_v1_5.new(rsakey)
digest = SHA.new()
digest.update(bodyData.encode('UTF-8'))
signature = signer.sign(digest)
signature = b64encode(signature).decode()
این کد مربوط به وب سرویس بانک پاسارگاد بود که نمونه مشابه شو توی اینترنت پیدا کردم.
private function signData($dataToSign): string
{
$fp = fopen("private-key.pem", "r");
$privKey = fread($fp, 2048);
fclose($fp);
$pKeyId = openssl_get_privatekey($privKey, 'optional_passphrase');
$signature = null;
openssl_sign($dataToSign, $signature, $pKeyId, OPENSSL_ALGO_SHA1);
return base64_encode($signature);
}
سلام
با توجه به فراخوانی کتابخانه انتظار هست که شی ایجاد شده تحت عملیات های مختلفی قرار بگیره یعنی باید اشراف بالایی در محتوای کتابخانه و فرایندهای اون داشت از طرفی موضوع فقط به رمزنگاری محدود نمیشه و موارد کلی بیشتری برای کریپتو مد نظر هست اگر توسعه دهنده فقط پایتون و ناد رو معرفی کرده احتمالا تلاش برای طراحی اون با php به زمان و انرژی زیادی نیاز هست.
با این حال چیزی که مشخصه اینه آبجکت پاس داده شده ابتدا به صورت رشته تغیر کرده سپس با الگوریتم SHA1 رمزنگاری شده و مجدد با کلید خصوصی رمزنگاری شده و در نهایت به صورت base64 کد شده. متدهای مورد نظر در php هم وجود داره که به نظر میرسه ابتدا باید ساختار آبجکت ورودی رو مشخص کنید و سپس نمونه های فراوانی رو هم با نسخه ناد و هم با نسخه php تست و مقایسه کنید چون باید در نظر گرفت اینجا کتابخانه crypto فراخوانی شده که خودش یکی از مجهولات مهم است که برای مطالعه باید براش وقت گذاشت.
این کد مربوط به وب سرویس بانک پاسارگاد بود که نمونه مشابه شو توی اینترنت پیدا کردم.
private function signData($dataToSign): string
{
$fp = fopen("private-key.pem", "r");
$privKey = fread($fp, 2048);
fclose($fp);
$pKeyId = openssl_get_privatekey($privKey, 'optional_passphrase');
$signature = null;
openssl_sign($dataToSign, $signature, $pKeyId, OPENSSL_ALGO_SHA1);
return base64_encode($signature);
}
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟