الیاس سخاوتی نیا
3 سال پیش توسط الیاس سخاوتی نیا مطرح شد
2 پاسخ

تبدیل یک قطعه کد پایتون یا nodejs به php

سلام وقت بخیر
یه قطعه کد هست به دو زبان پایتون و نود جی اس
میخواستم ببینم کسی میتونه راهنمایی کنه که چجوری مشابه همین کار رو توی 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()

ثبت پرسش جدید
الیاس سخاوتی نیا
تخصص : علاقه‌مند به برنامه‌‎نویسی
@elyassir 3 سال پیش مطرح شد
0

این کد مربوط به وب سرویس بانک پاسارگاد بود که نمونه مشابه شو توی اینترنت پیدا کردم.

    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);
    }

حسن حکمتی
تخصص : برنامه نویس وب و بلاکچین
@hekmati 3 سال پیش مطرح شد
4

سلام
با توجه به فراخوانی کتابخانه انتظار هست که شی ایجاد شده تحت عملیات های مختلفی قرار بگیره یعنی باید اشراف بالایی در محتوای کتابخانه و فرایندهای اون داشت از طرفی موضوع فقط به رمزنگاری محدود نمیشه و موارد کلی بیشتری برای کریپتو مد نظر هست اگر توسعه دهنده فقط پایتون و ناد رو معرفی کرده احتمالا تلاش برای طراحی اون با php به زمان و انرژی زیادی نیاز هست.
با این حال چیزی که مشخصه اینه آبجکت پاس داده شده ابتدا به صورت رشته تغیر کرده سپس با الگوریتم SHA1 رمزنگاری شده و مجدد با کلید خصوصی رمزنگاری شده و در نهایت به صورت base64 کد شده. متدهای مورد نظر در php هم وجود داره که به نظر میرسه ابتدا باید ساختار آبجکت ورودی رو مشخص کنید و سپس نمونه های فراوانی رو هم با نسخه ناد و هم با نسخه php تست و مقایسه کنید چون باید در نظر گرفت اینجا کتابخانه crypto فراخوانی شده که خودش یکی از مجهولات مهم است که برای مطالعه باید براش وقت گذاشت.


الیاس سخاوتی نیا
تخصص : علاقه‌مند به برنامه‌‎نویسی
@elyassir 3 سال پیش مطرح شد
0

این کد مربوط به وب سرویس بانک پاسارگاد بود که نمونه مشابه شو توی اینترنت پیدا کردم.

    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);
    }

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام