「配枪朱丽叶。」

RootのCTF学习笔记。

AFCTF2018/BUUCTF-Crypto:One Secret, Two encryption

题目下载

先分别求一下n和e。
SSL在线工具-公钥解析

public1.pub

e = 1666626632960368239001159408047765991270250042206244157447171188195657302933019501932101777999510001235736338843107709871785906749393004257614129802061081155861433722380145001537181142613515290138835765236002811689986472280762408157176437503021753061588746520433720734608953639111558556930490721517579994493088551013050835690019772600744317398218183883402192060480979979456469937863257781362521184578142129444122428832106721725409309113975986436241662107879085361014650716439042856013203440242834878648506244428367706708431121109714505981728529818874621868624754285069693368779495316600601299037277003994790396589299
n = 
4850297138162223468826481623082440249579136876798312652735204698
6896139690086325452209766991703084540823908347425707182478042020
6092949357164207467942856516840587711068151810566730178565351769
7684490982375078989886040451115082120928982588380914609273008153
9779079505324986054862258839736431415160240583153605729887446071
3411025448942151602693724916349398268133662872603348912470565721
7768229058487155865265080427488028921879608338898933540825564889
0121661813461772766398283463763621689342088224672956737618769658
6457316452933688525057735776731425658101947413065141210089783960
6491189424373959244023695669653213498329

public2.pub

e = 65537
n = 2367536768672000959668181171787295271898789288397672997134843418
9324059599467396373680444203198617978567714905734430035201371493
2408021797183678057052225866141903448151488306809275216675296787
9497095564732505614751532330408675056285275354250157955321457579
0063603932183271648049513842900419565518553344927967199018181657
8890254758456345574794151729687569724184117721963502446139559611
7584194226134777078874543699117761893699634303571421106917894215
0789388859999635805868244970400732410558903287943100258790142940
5123059071656294253803188396531739772827158975971837607341463202
6801806560862906691989093298478752580277

根据题目描述:

一份秘密发送给两个人不太好吧,那我各自加密一次好啦~~~
素数生成好慢呀
偷个懒也……不会有问题的吧?

求两个n的素数

def gcd(a,b):
    if a<b: #如果a<b,则交换两数位置,否则不交换
        a,b = b,a
    r = a % b #求a/b的余数
    while r != 0: #在余数不为零时,始终进行交换和相除
        a,b = b,r
        r = a % b
    print(b) #余数为零后,打印输出b
x = 0x266BF81730BF9B8AF536D2626EE793D94A334013A4B43D0D96579B18200ED92DB27A96C856F1C7E8844ACDD13508BFEE8EFA15D2305778C2BBF6EFE7FA6A43C4A9E34BE8B5A32AA7270BD234DEF6F260366E2E47DEA0FC0CF541C8B9151F53F97F2C338292390E90737948CB9F83AEB2386738C0B0E2F5FF2C113E1031EAC0545FC767B69CA58602BBC4285A7392CBD2A25732903332A468BF9670DDAC6CBB00EB5CE38B1BFBC9B3070E673230A1DBE556DF3ECA8C5B5F6BA182D5E65B98DD296B853A209B21A0D7D43793B8585B771A25CED62C46CF0FF3A79473032C0ACD51833207DB7409D2CD65908713AA5B88C68D192FABC0672AC476D60A91824B4BD9
y = 0x12C127290602956DF53A263468200F6F2645426A9039864965B2DA0F6613BA4F599064AE43483FA0830317BBF22F7DADEA2AC9D0F7316BBC850B8D6939DBEFFEAB5B1C92054D5CA13D2BC45112E8F40A1375433C76E1DA66B73EB439BC71404491912A4B0FCC2F0D3BAB01DD6BA2568AAAA4B6B97C6FF42CDBACCCD264E0F550312629AFC9497CB762F43AED2E1CDCD390560C07700990BAA5994E656E171B1B97587099648F3204DC36416931C8DE0B1D3E0EEB8DFE54EA41617280918146702F2F04A95D4BAAEF8EC54228A571AE4FFBB7E2CF64DBD8E127DBF584E35BE3A8C5475231B163E46C783A4D0FBD453AF90697C8B1584ABC79B7E591A76D55C2B5
gcd(x,y)

运行后得到最大公约数:

174410123761631337520799179808598127914184971978811796722414215239874114048347830609255805203105210941441708658356189056418366104015120153227123562166980882513945308613658062284844636341082646995916907680076101741743945938845994542592182491688095893467336553001430454260431413695816790105384153941685561590503

n = p* q,所以我用public2.pub的n除以它得到另外一个素数

27809722472252756488236572384949349891208643090117349509994417047989746484576130392206781875743390815588696964830219136848285391966773129269973231061599768809907518881304479207799187410626121509031210549317480187679455501340422680238395009932081263455435640341892702399022829951248686529928945588545968218943

这样必备的都齐啦,运行后得到flag:

import gmpy2
import libnum
n = 4850297138162223468826481623082440249579136876798312652735204698689613969008632545220976699170308454082390834742570718247804202060929493571642074679428565168405877110681518105667301785653517697684490982375078989886040451115082120928982588380914609273008153977907950532498605486225883973643141516024058315360572988744607134110254489421516026937249163493982681336628726033489124705657217768229058487155865265080427488028921879608338898933540825564889012166181346177276639828346376362168934208822467295673761876965864573164529336885250577357767314256581019474130651412100897839606491189424373959244023695669653213498329
p = 174410123761631337520799179808598127914184971978811796722414215239874114048347830609255805203105210941441708658356189056418366104015120153227123562166980882513945308613658062284844636341082646995916907680076101741743945938845994542592182491688095893467336553001430454260431413695816790105384153941685561590503
q = 27809722472252756488236572384949349891208643090117349509994417047989746484576130392206781875743390815588696964830219136848285391966773129269973231061599768809907518881304479207799187410626121509031210549317480187679455501340422680238395009932081263455435640341892702399022829951248686529928945588545968218943
e = 1666626632960368239001159408047765991270250042206244157447171188195657302933019501932101777999510001235736338843107709871785906749393004257614129802061081155861433722380145001537181142613515290138835765236002811689986472280762408157176437503021753061588746520433720734608953639111558556930490721517579994493088551013050835690019772600744317398218183883402192060480979979456469937863257781362521184578142129444122428832106721725409309113975986436241662107879085361014650716439042856013203440242834878648506244428367706708431121109714505981728529818874621868624754285069693368779495316600601299037277003994790396589299
c=int(open('flag_encry1','rb').read().encode('hex'),16)
d=gmpy2.invert(e,(p-1)*(q-1))
m = pow(c,d,n)
print m
print libnum.n2s(m)