






السمعة:
- إنضم17 يونيو 2023
- المشاركات 527
- الحلول 10
- مستوى التفاعل 1,119
- النقاط 93
c= 62324783949134119159408816513334912534343517300880137691662780895409992760262021
n= 1280678415822214057864524798453297819181910621573945477544758171055968245116423923
e= 65537
خوارزمية RSA يمكن فك تشفيرها من المعطيات عن طريق القوانين التالية :
كود:
m = c^d (mod n)
d = e⁻¹ (mod φ)
φ = ( p - 1 ) * ( q - 1 )
n = p * q
حيث
p و q : هما عددان أوليان يتم اختيارهما بشكل عشوائي.m : هي الرسالة التي ترغب في تشفيرها أو فك تشفيرها (plaintext).
c : هو النص المشفر ,الرسالة التي تم تشفيرها باستخدام مفتاح.
d : هو المفتاح الخاص (Private exponent).
e : هو المفتاح العام (Public exponent).
يمكن ايجاد قيم p و q من n عن طريق الموقع التالي factor db
p = 1899107986527483535344517113948531328331
q = 674357869540600933870145899564746495319033
يمكن ايجاد القيم عن طريق كود بايثون لكن اولا يجب معرفه كيفيه كتابه القوانين داخل بايثون وهي كالتالي
m = c^d (mod n) = in python ( m = pow(c, d, n))
كود:
d = e⁻¹ (mod φ) = in python (inverse(e,φ)
لكن inverse قبل استخدامها يجب التأكد من تثبيت مكتبه pycryptodome عن طريق الكود التالي:
كود:
pip install pycryptodome
ويجب استخدام داله long_to_bytes لاخراج النص الصحيح للحل
ويجب قبل وضعها بالكود استدعاء المكتبه عن طريق السطر التالي:
كود:
from Crypto.Util.number import inverse
وتستخدم داله .decode(‘utf-8’) لطباعه النص فقط بترميز “utf-8”
يمكن حل التحدي عن طريق الكود التالي
كود:
from Crypto.Util.number import inverse, long_to_bytes
p = 1899107986527483535344517113948531328331
q = 674357869540600933870145899564746495319033
c = 62324783949134119159408816513334912534343517300880137691662780895409992760262021
e = 65537
n = p * q
phi = ( p - 1 ) * ( q - 1 )
d = inverse(e,phi) m = pow(c, d, n)
message_bytes = long_to_bytes(m)
message = message_bytes.decode('utf-8')
print(message)
picoCTF{sma11_N_n0_g0od_05012767}
التعديل الأخير: