مضى على الشبكة و يوم من العطاء.
  • تحذير: يجب على كل روّاد الشبكة تشغيل برامج الاختراق داخل الأنظمة الوهمية وهي بهدف التعلم وحماية الأعضاء والتوعية بها

[ شرح ] حل تحدي bAby_rSA من مسابقة TTUCTF المقامه في جامعه الطفيله التقنيه

Řanda

./عضو جديد

السمعة:

السلام عليكم ورحمة الله
حل تحدي bAby_rSA من مسابقة TTUCTF المُقامه في جامعة الطفيلة التقنية


📍أول شيء بنعرض ملفات التحدي

description

كود:
I wanted to raise the power of a number, but my friend picked a number to put in the equation int("9" * 1000)

but

My friend's number is bigger than everything...even if another number is raised to a power it (My friend's number) is still huge

code.py
Python:
import math
from Crypto.Util.number import *

# p and q consist of 15 digits
p = 366652997......
q = 926782929......
n = p * q
e = 7
phi = ( p - 1 ) * (q - 1 )

m = bytes_to_long(b"TTUCTF{r5A

o2 = 36861728689062005922079472777522260642618880598666338535731
m = int(m / o2) # m mod o2 == 0
print("c =" , pow(m,e,n))

x = ??
# If you know the value of x in range (47,53) Search manually...

k = pow((p - 1) , x , int("9" * 1000))
l = pow((q + 1) , x , int("9" * 1000))

print("k =" , k)
print("l =" , l)

output.txt
Python:
c = 311913313541165347372338283513
k = 163215726038713706989303647202033813645656998721543259773716955657012777001268130391390337238803033531298800406273193471792517987655733198024052623295990627680047932855450905833612355053222129266244897458798107424636949257267538463481106742627778551880169706371109273488541086719441064673434510966061295060106777276283596345721682333625355355301263665402761829008707748571859919234952755203896556877605897112652874533509643603149649407222415013720382770201796615663941476197080525214619330481679165262067227009142818461236173238265736794147415707673483980537693113730323824816643471707227661325849801684556166966783171610575891637750703167580778938949676377613702776550081118365942918745441127133906376446240753169401705738010624
l = 22330646905727778425635861987069204693215970647562903916876004162496159529518859015558170558031262035907153330872961135722376390948852891725435071183940360278565929635687183617052079231961950215282311720415612754844622706742909303234455865864979682591897660681126883478584603323934231497632933373005498700493328277824406083414380485576686901746940334376226382246559420803020679840747685377636787506274763880791139386073106571543141282932745813402305238355842655089697799341016628143259309379348741857056408635522117422908816590175132226230786839667450612026309747355213805870264753210975572503460096313340144017677260036955239504477394642004832783781349896149175741154621045322429396182383646214225605580360145491238182572304357590700798722780954624



fa.webp

أول شيء بنفهمه من الوصف إنه بحكي عن هدول السطرين من الكود :

Python:
k = pow((p - 1) , x , int("9" * 1000))
l = pow((q + 1) , x , int("9" * 1000))

بنفهم من الوصف أن القيمة int("9" * 1000) كبيرة وهي مبينة معنا وبنقدر نعرف برضو إنها أكبر من (q + 1) قوة x من الوصف يعني بنستنتج إنه أي شيء صغير mode كبير بعطينا الصغير نفسه يعني ما إلها قيمة أصلًا الـ int("9" * 1000) , فبنمحيها وبنخلي العملية بس قوة , الـ pow بتساوي
Python:
pow( A , B ,C ) == A ^ B mod C

وزي ما طلع بالهنت إنه هاي القيمة pow((p - 1) , x , int("9" * 1000)) هي نفسها هاي القيمة (p - 1) ^ x اللي معنى بالوصف

الآن بنشوف إنه معنا قيم p and q لكن ناقصات

Python:
p = 366652997......
q = 926782929......

ومعطينا إنه كل وحدة منهم 15 رقم , بنعمل فور لوب من القيمة هاي 366652997000000 اللي هي الرقم اللي بنعرفه وبنحط باقي القيم صفار عشان يبدأ من أقل قيمة ممكن تكون هي قيمة الـ p وبنخلي الفور لوب تخلص للـ 366652998000000 اللي هي أعلى قيمة ممكن تكون هي القيمة يعني زدنا واحد على آخر رقم كان 7 خليناه 8 , فهيك راح يجرب كل القيم الممكنة لـ p وبنعمل نفس الاشي للـ q ف بصفي عننا .

Python:
for p in range(366652997000000, 366652998000000):
        for q in range(926782929000000, 926782930000000):


هسا بنحط الشرط اللي يتأكد إذا كانت الـ p والـ q صح , هو معطينا بالسؤال :

k = (p - 1) ** x
l = ( q + 1 ) ** x


معطينا قيمة الـ x ومعطينا قيمة الـ k ف بنخليه يعمل العملية هاي k = (p - 1) ** x اللي هي من السؤال ويتأكد إذا طابقت القيمة اللي معطينا إياها if k == k2

وبنعمل نفس الاشي للـ q ف بصفي عننا :


Python:
for p in range(366652997000000, 366652998000000):
    k = (p - 1) ** x
    if k == k2:
        for q in range(926782929000000, 926782930000000):
            l = ( q + 1 ) ** x
            if l == l2:


آخر شيء صار معنا القيم الـ p والـ q بنطبق الخوارزمية rsa وهي شرحها , شرح 3b0-0d




آخر شيء بنكتب هاد السطر وشرحه كالآتي:

Python:
print(long_to_bytes(pow(c, inverse(e, (p - 1) * (q - 1)), p * q) * o2).decode())

بنبدأ من جوا
Python:
pow( c , inverse( e , (p - 1) * (q - 1) )  , p * q)
phi =  (p - 1) * (q - 1)

so...

pow( c , inverse( e , phi )  , p * q)
d = inverse( e , phi )

so...

pow( c , d  , p * q)
n = p * q

so...

m = pow( c , d  , n)  >> in RSA

آخر شيء بنضرب قيمة m بالقيمة o2 , لأنه بالسؤال قسم قيمة m على الـ o2 وحكالنا إنه ما في باقي قسمة m mod o2 == 0 #


بصفي معنا الكود كامل:


Python:
from Crypto.Util.number import *

e = 7
c = 311913313541165347372338283513
k2 = 163215726038713706989303647202033813645656998721543259773716955657012777001268130391390337238803033531298800406273193471792517987655733198024052623295990627680047932855450905833612355053222129266244897458798107424636949257267538463481106742627778551880169706371109273488541086719441064673434510966061295060106777276283596345721682333625355355301263665402761829008707748571859919234952755203896556877605897112652874533509643603149649407222415013720382770201796615663941476197080525214619330481679165262067227009142818461236173238265736794147415707673483980537693113730323824816643471707227661325849801684556166966783171610575891637750703167580778938949676377613702776550081118365942918745441127133906376446240753169401705738010624
l2 = 22330646905727778425635861987069204693215970647562903916876004162496159529518859015558170558031262035907153330872961135722376390948852891725435071183940360278565929635687183617052079231961950215282311720415612754844622706742909303234455865864979682591897660681126883478584603323934231497632933373005498700493328277824406083414380485576686901746940334376226382246559420803020679840747685377636787506274763880791139386073106571543141282932745813402305238355842655089697799341016628143259309379348741857056408635522117422908816590175132226230786839667450612026309747355213805870264753210975572503460096313340144017677260036955239504477394642004832783781349896149175741154621045322429396182383646214225605580360145491238182572304357590700798722780954624
o2 = 36861728689062005922079472777522260642618880598666338535731
x = 50


for p in range(366652997000000, 366652998000000):
    k = (p - 1) ** x
    if k == k2:
        for q in range(926782929000000, 926782930000000):
            l = ( q + 1 ) ** x
            if l == l2:
                m = print(long_to_bytes(pow(c, inverse(e, (p - 1) * (q - 1)), p * q) * o2).decode())


1723501056971.webp



الـ flag
TTUCTF{r5A_1s_A1w4yS_Beau7iFu1}
 
التعديل الأخير بواسطة المشرف:
اول اشي بنعرض ملفات التحدي


description
كود:
I wanted to raise the power of a number, but my friend picked a number to put in the equation int("9" * 1000)

but

My friend's number is bigger than everything...even if another number is raised to a power it (My friend's number) is still huge


code.py

Python:
import math
from Crypto.Util.number import *

# p and q consist of 15 digits
p = 366652997......
q = 926782929......
n = p * q
e = 7
phi = ( p - 1 ) * (q - 1 )

m = bytes_to_long(b"TTUCTF{r5A

o2 = 36861728689062005922079472777522260642618880598666338535731
m = int(m / o2) # m mod o2 == 0
print("c =" , pow(m,e,n))

x = ??
# If you know the value of x in range (47,53) Search manually...

k = pow((p - 1) , x , int("9" * 1000))
l = pow((q + 1) , x , int("9" * 1000))

print("k =" , k)
print("l =" , l)


output.txt
Python:
c = 311913313541165347372338283513
k = 163215726038713706989303647202033813645656998721543259773716955657012777001268130391390337238803033531298800406273193471792517987655733198024052623295990627680047932855450905833612355053222129266244897458798107424636949257267538463481106742627778551880169706371109273488541086719441064673434510966061295060106777276283596345721682333625355355301263665402761829008707748571859919234952755203896556877605897112652874533509643603149649407222415013720382770201796615663941476197080525214619330481679165262067227009142818461236173238265736794147415707673483980537693113730323824816643471707227661325849801684556166966783171610575891637750703167580778938949676377613702776550081118365942918745441127133906376446240753169401705738010624
l = 22330646905727778425635861987069204693215970647562903916876004162496159529518859015558170558031262035907153330872961135722376390948852891725435071183940360278565929635687183617052079231961950215282311720415612754844622706742909303234455865864979682591897660681126883478584603323934231497632933373005498700493328277824406083414380485576686901746940334376226382246559420803020679840747685377636787506274763880791139386073106571543141282932745813402305238355842655089697799341016628143259309379348741857056408635522117422908816590175132226230786839667450612026309747355213805870264753210975572503460096313340144017677260036955239504477394642004832783781349896149175741154621045322429396182383646214225605580360145491238182572304357590700798722780954624








الحل
اول اشي بنفهمو من الوصف انه بحكي عن هدول السطرين من الكود

Python:
k = pow((p - 1) , x , int("9" * 1000))
l = pow((q + 1) , x , int("9" * 1000))



بنفهم من الوصف انه القيمه int("9" * 1000) كبيره وهي مبينه معنا وبنقدر نعرف برضو انها اكبر من (q + 1) قوه x من الوصف يعني بنستنتج انه اي اشي صغير mode كبير بعطينا الصغير نفسه يعني ما الها قيمه اصلا الـ int("9" * 1000) ف بنمحيها وبنخلي العمليه بس قوه
الـ pow بتساوي
Python:
pow( A , B ,C ) == A ^ B mod C


وزي ما طلع بالهنت انه

هاي القيمه
pow((p - 1) , x , int("9" * 1000))
هي نفسها هاي القيمه
(p - 1) ^ x

اللي معنى الوصف


الان بنشوف انه معنا قيم p and q لكن ناقصات

Python:
p = 366652997......
q = 926782929......

ومعطينا انه كل وحده منهم 15 رقم

بنعمل فور لوب من القيمه هاي 366652997000000 اللي هي الرقم اللي بنعرفه وبنحط باقي القيم صفار عشان يبدا من اقل قيمه ممكن تكون هي قيمه الـ p وبنخلي الفور لوب تخلص للـ 366652998000000 اللي هي اعلا قيمه ممكن تكون هي القيمه يعني زدا واحد على اخر رقم كان 7 خليناه 8 ف هيك راح يجرب كل القيم الممكنه لـ p وبنعمل نفس الاشي للـ q ف بصفي عننا


Python:
for p in range(366652997000000, 366652998000000):
        for q in range(926782929000000, 926782930000000):


هسا بنحط الشرط اللي يتأكد اذا كانت الـ p والـ q صح
هو معطينا بالسؤال
k = (p - 1) ** x
l = ( q + 1 ) ** x

معطينا قيمه الـ x ومعطينا قيمه الـ k ف بنخليه يعمل العمليه هاي k = (p - 1) ** x اللي هي من السؤال ويتاكد اذا طابقت القيمه اللي معطينا اياها if k == k2

وبنعمل نفس الاشي للـ q ف بصفي عننا


Python:
for p in range(366652997000000, 366652998000000):
    k = (p - 1) ** x
    if k == k2:
        for q in range(926782929000000, 926782930000000):
            l = ( q + 1 ) ** x
            if l == l2:


اخر اشي صار معنا القيم الـ p والـ q بنطبق الخوارزميه rsa وهي شرحها

شرح 3b0-0d



اخر اشي بنكتب هاد السطر وشرحه كالاتي


Python:
print(long_to_bytes(pow(c, inverse(e, (p - 1) * (q - 1)), p * q) * o2).decode())

بنبدا من جوا

Python:
pow( c , inverse( e , (p - 1) * (q - 1) )  , p * q)
phi =  (p - 1) * (q - 1)

so...

pow( c , inverse( e , phi )  , p * q)
d = inverse( e , phi )

so...

pow( c , d  , p * q)
n = p * q

so...

m = pow( c , d  , n)  >> in RSA

اخر اشي بنضرب قيمه m بالقيمه o2 لانه بالسؤال قسم قيمه m على الـ o2 وحكالنا انه مافي باقي قسمه m mod o2 == 0 #


بصفي معنا الكود كامل



Python:
from Crypto.Util.number import *

e = 7
c = 311913313541165347372338283513
k2 = 163215726038713706989303647202033813645656998721543259773716955657012777001268130391390337238803033531298800406273193471792517987655733198024052623295990627680047932855450905833612355053222129266244897458798107424636949257267538463481106742627778551880169706371109273488541086719441064673434510966061295060106777276283596345721682333625355355301263665402761829008707748571859919234952755203896556877605897112652874533509643603149649407222415013720382770201796615663941476197080525214619330481679165262067227009142818461236173238265736794147415707673483980537693113730323824816643471707227661325849801684556166966783171610575891637750703167580778938949676377613702776550081118365942918745441127133906376446240753169401705738010624
l2 = 22330646905727778425635861987069204693215970647562903916876004162496159529518859015558170558031262035907153330872961135722376390948852891725435071183940360278565929635687183617052079231961950215282311720415612754844622706742909303234455865864979682591897660681126883478584603323934231497632933373005498700493328277824406083414380485576686901746940334376226382246559420803020679840747685377636787506274763880791139386073106571543141282932745813402305238355842655089697799341016628143259309379348741857056408635522117422908816590175132226230786839667450612026309747355213805870264753210975572503460096313340144017677260036955239504477394642004832783781349896149175741154621045322429396182383646214225605580360145491238182572304357590700798722780954624
o2 = 36861728689062005922079472777522260642618880598666338535731
x = 50


for p in range(366652997000000, 366652998000000):
    k = (p - 1) ** x
    if k == k2:
        for q in range(926782929000000, 926782930000000):
            l = ( q + 1 ) ** x
            if l == l2:
                m = print(long_to_bytes(pow(c, inverse(e, (p - 1) * (q - 1)), p * q) * o2).decode())








شكرا شكرا رندة هيك صار لازم احاول مرة تانية😁🔥 يعطيك العافية❤
 
اول اشي بنعرض ملفات التحدي


description
كود:
I wanted to raise the power of a number, but my friend picked a number to put in the equation int("9" * 1000)

but

My friend's number is bigger than everything...even if another number is raised to a power it (My friend's number) is still huge


code.py

Python:
import math
from Crypto.Util.number import *

# p and q consist of 15 digits
p = 366652997......
q = 926782929......
n = p * q
e = 7
phi = ( p - 1 ) * (q - 1 )

m = bytes_to_long(b"TTUCTF{r5A

o2 = 36861728689062005922079472777522260642618880598666338535731
m = int(m / o2) # m mod o2 == 0
print("c =" , pow(m,e,n))

x = ??
# If you know the value of x in range (47,53) Search manually...

k = pow((p - 1) , x , int("9" * 1000))
l = pow((q + 1) , x , int("9" * 1000))

print("k =" , k)
print("l =" , l)


output.txt
Python:
c = 311913313541165347372338283513
k = 163215726038713706989303647202033813645656998721543259773716955657012777001268130391390337238803033531298800406273193471792517987655733198024052623295990627680047932855450905833612355053222129266244897458798107424636949257267538463481106742627778551880169706371109273488541086719441064673434510966061295060106777276283596345721682333625355355301263665402761829008707748571859919234952755203896556877605897112652874533509643603149649407222415013720382770201796615663941476197080525214619330481679165262067227009142818461236173238265736794147415707673483980537693113730323824816643471707227661325849801684556166966783171610575891637750703167580778938949676377613702776550081118365942918745441127133906376446240753169401705738010624
l = 22330646905727778425635861987069204693215970647562903916876004162496159529518859015558170558031262035907153330872961135722376390948852891725435071183940360278565929635687183617052079231961950215282311720415612754844622706742909303234455865864979682591897660681126883478584603323934231497632933373005498700493328277824406083414380485576686901746940334376226382246559420803020679840747685377636787506274763880791139386073106571543141282932745813402305238355842655089697799341016628143259309379348741857056408635522117422908816590175132226230786839667450612026309747355213805870264753210975572503460096313340144017677260036955239504477394642004832783781349896149175741154621045322429396182383646214225605580360145491238182572304357590700798722780954624








الحل
اول اشي بنفهمو من الوصف انه بحكي عن هدول السطرين من الكود

Python:
k = pow((p - 1) , x , int("9" * 1000))
l = pow((q + 1) , x , int("9" * 1000))



بنفهم من الوصف انه القيمه int("9" * 1000) كبيره وهي مبينه معنا وبنقدر نعرف برضو انها اكبر من (q + 1) قوه x من الوصف يعني بنستنتج انه اي اشي صغير mode كبير بعطينا الصغير نفسه يعني ما الها قيمه اصلا الـ int("9" * 1000) ف بنمحيها وبنخلي العمليه بس قوه
الـ pow بتساوي
Python:
pow( A , B ,C ) == A ^ B mod C


وزي ما طلع بالهنت انه

هاي القيمه
pow((p - 1) , x , int("9" * 1000))
هي نفسها هاي القيمه
(p - 1) ^ x

اللي معنى الوصف


الان بنشوف انه معنا قيم p and q لكن ناقصات

Python:
p = 366652997......
q = 926782929......

ومعطينا انه كل وحده منهم 15 رقم

بنعمل فور لوب من القيمه هاي 366652997000000 اللي هي الرقم اللي بنعرفه وبنحط باقي القيم صفار عشان يبدا من اقل قيمه ممكن تكون هي قيمه الـ p وبنخلي الفور لوب تخلص للـ 366652998000000 اللي هي اعلا قيمه ممكن تكون هي القيمه يعني زدا واحد على اخر رقم كان 7 خليناه 8 ف هيك راح يجرب كل القيم الممكنه لـ p وبنعمل نفس الاشي للـ q ف بصفي عننا


Python:
for p in range(366652997000000, 366652998000000):
        for q in range(926782929000000, 926782930000000):


هسا بنحط الشرط اللي يتأكد اذا كانت الـ p والـ q صح
هو معطينا بالسؤال
k = (p - 1) ** x
l = ( q + 1 ) ** x

معطينا قيمه الـ x ومعطينا قيمه الـ k ف بنخليه يعمل العمليه هاي k = (p - 1) ** x اللي هي من السؤال ويتاكد اذا طابقت القيمه اللي معطينا اياها if k == k2

وبنعمل نفس الاشي للـ q ف بصفي عننا


Python:
for p in range(366652997000000, 366652998000000):
    k = (p - 1) ** x
    if k == k2:
        for q in range(926782929000000, 926782930000000):
            l = ( q + 1 ) ** x
            if l == l2:


اخر اشي صار معنا القيم الـ p والـ q بنطبق الخوارزميه rsa وهي شرحها

شرح 3b0-0d



اخر اشي بنكتب هاد السطر وشرحه كالاتي


Python:
print(long_to_bytes(pow(c, inverse(e, (p - 1) * (q - 1)), p * q) * o2).decode())

بنبدا من جوا

Python:
pow( c , inverse( e , (p - 1) * (q - 1) )  , p * q)
phi =  (p - 1) * (q - 1)

so...

pow( c , inverse( e , phi )  , p * q)
d = inverse( e , phi )

so...

pow( c , d  , p * q)
n = p * q

so...

m = pow( c , d  , n)  >> in RSA

اخر اشي بنضرب قيمه m بالقيمه o2 لانه بالسؤال قسم قيمه m على الـ o2 وحكالنا انه مافي باقي قسمه m mod o2 == 0 #


بصفي معنا الكود كامل



Python:
from Crypto.Util.number import *

e = 7
c = 311913313541165347372338283513
k2 = 163215726038713706989303647202033813645656998721543259773716955657012777001268130391390337238803033531298800406273193471792517987655733198024052623295990627680047932855450905833612355053222129266244897458798107424636949257267538463481106742627778551880169706371109273488541086719441064673434510966061295060106777276283596345721682333625355355301263665402761829008707748571859919234952755203896556877605897112652874533509643603149649407222415013720382770201796615663941476197080525214619330481679165262067227009142818461236173238265736794147415707673483980537693113730323824816643471707227661325849801684556166966783171610575891637750703167580778938949676377613702776550081118365942918745441127133906376446240753169401705738010624
l2 = 22330646905727778425635861987069204693215970647562903916876004162496159529518859015558170558031262035907153330872961135722376390948852891725435071183940360278565929635687183617052079231961950215282311720415612754844622706742909303234455865864979682591897660681126883478584603323934231497632933373005498700493328277824406083414380485576686901746940334376226382246559420803020679840747685377636787506274763880791139386073106571543141282932745813402305238355842655089697799341016628143259309379348741857056408635522117422908816590175132226230786839667450612026309747355213805870264753210975572503460096313340144017677260036955239504477394642004832783781349896149175741154621045322429396182383646214225605580360145491238182572304357590700798722780954624
o2 = 36861728689062005922079472777522260642618880598666338535731
x = 50


for p in range(366652997000000, 366652998000000):
    k = (p - 1) ** x
    if k == k2:
        for q in range(926782929000000, 926782930000000):
            l = ( q + 1 ) ** x
            if l == l2:
                m = print(long_to_bytes(pow(c, inverse(e, (p - 1) * (q - 1)), p * q) * o2).decode())








الله يعطيكي العافيه ابداع 🫡🫡
 
اول اشي بنعرض ملفات التحدي


description
كود:
I wanted to raise the power of a number, but my friend picked a number to put in the equation int("9" * 1000)

but

My friend's number is bigger than everything...even if another number is raised to a power it (My friend's number) is still huge


code.py

Python:
import math
from Crypto.Util.number import *

# p and q consist of 15 digits
p = 366652997......
q = 926782929......
n = p * q
e = 7
phi = ( p - 1 ) * (q - 1 )

m = bytes_to_long(b"TTUCTF{r5A

o2 = 36861728689062005922079472777522260642618880598666338535731
m = int(m / o2) # m mod o2 == 0
print("c =" , pow(m,e,n))

x = ??
# If you know the value of x in range (47,53) Search manually...

k = pow((p - 1) , x , int("9" * 1000))
l = pow((q + 1) , x , int("9" * 1000))

print("k =" , k)
print("l =" , l)


output.txt
Python:
c = 311913313541165347372338283513
k = 163215726038713706989303647202033813645656998721543259773716955657012777001268130391390337238803033531298800406273193471792517987655733198024052623295990627680047932855450905833612355053222129266244897458798107424636949257267538463481106742627778551880169706371109273488541086719441064673434510966061295060106777276283596345721682333625355355301263665402761829008707748571859919234952755203896556877605897112652874533509643603149649407222415013720382770201796615663941476197080525214619330481679165262067227009142818461236173238265736794147415707673483980537693113730323824816643471707227661325849801684556166966783171610575891637750703167580778938949676377613702776550081118365942918745441127133906376446240753169401705738010624
l = 22330646905727778425635861987069204693215970647562903916876004162496159529518859015558170558031262035907153330872961135722376390948852891725435071183940360278565929635687183617052079231961950215282311720415612754844622706742909303234455865864979682591897660681126883478584603323934231497632933373005498700493328277824406083414380485576686901746940334376226382246559420803020679840747685377636787506274763880791139386073106571543141282932745813402305238355842655089697799341016628143259309379348741857056408635522117422908816590175132226230786839667450612026309747355213805870264753210975572503460096313340144017677260036955239504477394642004832783781349896149175741154621045322429396182383646214225605580360145491238182572304357590700798722780954624








الحل
اول اشي بنفهمه من الوصف انه بحكي عن هدول السطرين من الكود

Python:
k = pow((p - 1) , x , int("9" * 1000))
l = pow((q + 1) , x , int("9" * 1000))



بنفهم من الوصف انه القيمة int("9" * 1000) كبيرة وهي مبينة معنا وبنقدر نعرف برضو انها اكبر من (q + 1) قوة x من الوصف يعني بنستنتج انه اي اشي صغير mode كبير بعطينا الصغير نفسه يعني ما الها قيمة اصلا الـ int("9" * 1000) ف بنمحيها وبنخلي العملية بس قوة
الـ pow بتساوي
Python:
pow( A , B ,C ) == A ^ B mod C


وزي ما طلع بالهنت انه

هاي القيمة
pow((p - 1) , x , int("9" * 1000))
هي نفسها هاي القيمة
(p - 1) ^ x

اللي معنى الوصف


الان بنشوف انه معنا قيم p and q لكن ناقصات

Python:
p = 366652997......
q = 926782929......

ومعطينا انه كل وحدة منهم 15 رقم

بنعمل فور لوب من القيمة هاي 366652997000000 اللي هي الرقم اللي بنعرفه وبنحط باقي القيم صفار عشان يبدا من اقل قيمة ممكن تكون هي قيمة الـ p وبنخلي الفور لوب تخلص للـ 366652998000000 اللي هي اعلا قيمة ممكن تكون هي القيمة يعني زدا واحد على اخر رقم كان 7 خليناه 8 ف هيك راح يجرب كل القيم الممكنة لـ p وبنعمل نفس الاشي للـ q ف بصفي عننا


Python:
for p in range(366652997000000, 366652998000000):
        for q in range(926782929000000, 926782930000000):


هسا بنحط الشرط اللي يتأكد اذا كانت الـ p والـ q صح
هو معطينا بالسؤال
k = (p - 1) ** x
l = ( q + 1 ) ** x

معطينا قيمة الـ x ومعطينا قيمة الـ k ف بنخليه يعمل العملية هاي k = (p - 1) ** x اللي هي من السؤال ويتأكد اذا طابقت القيمة اللي معطينا اياها if k == k2

وبنعمل نفس الاشي للـ q ف بصفي عننا


Python:
for p in range(366652997000000, 366652998000000):
    k = (p - 1) ** x
    if k == k2:
        for q in range(926782929000000, 926782930000000):
            l = ( q + 1 ) ** x
            if l == l2:


اخر اشي صار معنا القيم الـ p والـ q بنطبق الخوارزمية rsa وهي شرحها

شرح 3b0-0d



اخر اشي بنكتب هاد السطر وشرحه كالاتي


Python:
print(long_to_bytes(pow(c, inverse(e, (p - 1) * (q - 1)), p * q) * o2).decode())

بنبدا من جوا

Python:
pow( c , inverse( e , (p - 1) * (q - 1) )  , p * q)
phi =  (p - 1) * (q - 1)

so...

pow( c , inverse( e , phi )  , p * q)
d = inverse( e , phi )

so...

pow( c , d  , p * q)
n = p * q

so...

m = pow( c , d  , n)  >> in RSA

اخر اشي بنضرب قيمة m بالقيمة o2 لانه بالسؤال قسم قيمة m على الـ o2 وحكالنا انه مافي باقي قسمة m mod o2 == 0 #


بصفي معنا الكود كامل



Python:
from Crypto.Util.number import *

e = 7
c = 311913313541165347372338283513
k2 = 163215726038713706989303647202033813645656998721543259773716955657012777001268130391390337238803033531298800406273193471792517987655733198024052623295990627680047932855450905833612355053222129266244897458798107424636949257267538463481106742627778551880169706371109273488541086719441064673434510966061295060106777276283596345721682333625355355301263665402761829008707748571859919234952755203896556877605897112652874533509643603149649407222415013720382770201796615663941476197080525214619330481679165262067227009142818461236173238265736794147415707673483980537693113730323824816643471707227661325849801684556166966783171610575891637750703167580778938949676377613702776550081118365942918745441127133906376446240753169401705738010624
l2 = 22330646905727778425635861987069204693215970647562903916876004162496159529518859015558170558031262035907153330872961135722376390948852891725435071183940360278565929635687183617052079231961950215282311720415612754844622706742909303234455865864979682591897660681126883478584603323934231497632933373005498700493328277824406083414380485576686901746940334376226382246559420803020679840747685377636787506274763880791139386073106571543141282932745813402305238355842655089697799341016628143259309379348741857056408635522117422908816590175132226230786839667450612026309747355213805870264753210975572503460096313340144017677260036955239504477394642004832783781349896149175741154621045322429396182383646214225605580360145491238182572304357590700798722780954624
o2 = 36861728689062005922079472777522260642618880598666338535731
x = 50


for p in range(366652997000000, 366652998000000):
    k = (p - 1) ** x
    if k == k2:
        for q in range(926782929000000, 926782930000000):
            l = ( q + 1 ) ** x
            if l == l2:
                m = print(long_to_bytes(pow(c, inverse(e, (p - 1) * (q - 1)), p * q) * o2).decode())








تحدي رائع وشرح رائع 🙌
 
بارك الله فيك وجزاك الله كل خير
ننتظر جديدك دائما
 

آخر المشاركات

عودة
أعلى