rsa0
题目:
他题目给了一个命令,然后用Kali 建立nc链接(netcat) ,输入命令:
得到以下的条件:
e=9914617
p+q=22097350165474156852661778152708486386910482478881910841952380475041214967985772239921394728144183944713372976250538064685000688036828406289385076445995800
p-q=-2098552216956720869866544050119942539099983408354064966610734531191223066775425866686667714716099501846885428464256786303379398342894150375894240474813178
c=42159804827875117677014676284854956217849599960931202183806496871745420401291952449260942324353222722266149845494028002597148833239957850895366110856986722964419518506459408174635425411907276842845338807306874209473557708949962967982162125956433721944716323618602138750983156282817624763755989791994224208297
flag=??????
解题思路:题目条件给的相当充分,所以直接写出python脚本:
import gmpy2
e=9914617
x=22097350165474156852661778152708486386910482478881910841952380475041214967985772239921394728144183944713372976250538064685000688036828406289385076445995800
y=-2098552216956720869866544050119942539099983408354064966610734531191223066775425866686667714716099501846885428464256786303379398342894150375894240474813178
c=42159804827875117677014676284854956217849599960931202183806496871745420401291952449260942324353222722266149845494028002597148833239957850895366110856986722964419518506459408174635425411907276842845338807306874209473557708949962967982162125956433721944716323618602138750983156282817624763755989791994224208297
p = (x+y)//2
q = (x-y)//2
n = p*q
phi = (p-1)*(q-1)
d = gmpy2.invert(e,phi)
m = pow(c,d,n)
print(bytes.fromhex(hex(m)[2:]))
答案为:flag{2b010b75-6e35-4777-93e7-886e3bc47e0a}
BabyRSA
题目:p+q : 0x1232fecb92adead91613e7d9ae5e36fe6bb765317d6ed38ad890b4073539a6231a6620584cea5730b5af83a3e80cf30141282c97be4400e33307573af6b25e2ea
(p+1)(q+1) : 0x5248becef1d925d45705a7302700d6a0ffe5877fddf9451a9c1181c4d82365806085fd86fbaab08b6fc66a967b2566d743c626547203b34ea3fdb1bc06dd3bb765fd8b919e3bd2cb15bc175c9498f9d9a0e216c2dde64d81255fa4c05a1ee619fc1fc505285a239e7bc655ec6605d9693078b800ee80931a7a0c84f33c851740
e : 0xe6b1bee47bd63f615c7d0a43c529d219
d : 0x2dde7fbaed477f6d62838d55b0d0964868cf6efb2c282a5f13e6008ce7317a24cb57aec49ef0d738919f47cdcd9677cd52ac2293ec5938aa198f962678b5cd0da344453f521a69b2ac03647cdd8339f4e38cec452d54e60698833d67f9315c02ddaa4c79ebaa902c605d7bda32ce970541b2d9a17d62b52df813b2fb0c5ab1a5
enc_flag : 0x50ae00623211ba6089ddfae21e204ab616f6c9d294e913550af3d66e85d0c0693ed53ed55c46d8cca1d7c2ad44839030df26b70f22a8567171a759b76fe5f07b3c5a6ec89117ed0a36c0950956b9cde880c575737f779143f921d745ac3bb0e379c05d9a3cc6bf0bea8aa91e4d5e752c7eb46b2e023edbc07d24a7c460a34a9a
解题原理:
p+q和(p+1)(q+1)已经给出,利用数学原理可以求出pq和(p-1)(q-1),然后就可以求出flag
代码:
import gmpy2
import binascii
a =0x1232fecb92adead91613e7d9ae5e36fe6bb765317d6ed38ad890b4073539a6231a6620584cea5730b5af83a3e80cf30141282c97be4400e33307573af6b25e2ea
b=0x5248becef1d925d45705a7302700d6a0ffe5877fddf9451a9c1181c4d82365806085fd86fbaab08b6fc66a967b2566d743c626547203b34ea3fdb1bc06dd3bb765fd8b919e3bd2cb15bc175c9498f9d9a0e216c2dde64d81255fa4c05a1ee619fc1fc505285a239e7bc655ec6605d9693078b800ee80931a7a0c84f33c851740
e=0xe6b1bee47bd63f615c7d0a43c529d219
d=0x2dde7fbaed477f6d62838d55b0d0964868cf6efb2c282a5f13e6008ce7317a24cb57aec49ef0d738919f47cdcd9677cd52ac2293ec5938aa198f962678b5cd0da344453f521a69b2ac03647cdd8339f4e38cec452d54e60698833d67f9315c02ddaa4c79ebaa902c605d7bda32ce970541b2d9a17d62b52df813b2fb0c5ab1a5
enc_flag=0x50ae00623211ba6089ddfae21e204ab616f6c9d294e913550af3d66e85d0c0693ed53ed55c46d8cca1d7c2ad44839030df26b70f22a8567171a759b76fe5f07b3c5a6ec89117ed0a36c0950956b9cde880c575737f779143f921d745ac3bb0e379c05d9a3cc6bf0bea8aa91e4d5e752c7eb46b2e023edbc07d24a7c460a34a9a
n=b-a-1
phi=n-a+1
d=gmpy2.invert(e,phi)
m=pow(enc_flag,d,n)
flag=binascii.unhexlify(hex(m)[2:])
print(flag)
flag为:flag{cc7490e-78ab-11e9-b422-8ba97e5da1fd}