buuctf[羊城杯 2020]Simple

buuctf[羊城杯 2020]Simple

题目描述

先贴一下题目源码

from Crypto.Util.number import *
from Crypto.Cipher import DES
import gmpy2
from secret import flag
import random

key = "abcdefgh"

def des_encrypt(m):
    des = DES.new(key, DES.MODE_ECB)
    res = des.encrypt(m)
    return res

def gen_key():
    p = getPrime(2048)
    q = getPrime(2048)
    n = p * q
    bit = n.bit_length()
    phi_n = (p - 1) * (q - 1)
    num = random.randint(1, 100)
    while True:
        u = getPrime(bit / 4 - num)
        if gmpy2.gcd(u, phi_n) != 1:
            continue
        t = gmpy2.invert(u, phi_n)
        e = bytes_to_long(des_encrypt(long_to_bytes(t)))
        if gmpy2.gcd(e, phi_n) == 1:
            break
    return (n, e)

P = getPrime(1024)
Q = getPrime(1024)
N = P * Q
E = 65537
lcm = gmpy2.lcm(P-1, Q-1)
e1 = gmpy2.invert(getPrime(730), lcm)
e2 = gmpy2.invert(getPrime(730), lcm)
m = bytes_to_long(flag)
c = pow(m, E, N)
print ("N = " + str(N))
print ("e2 = " + str(e2))
print ("c = " + str(c))
_n, _e = gen_key()

print( "_n = " + str(_n))
print( "_e = " + str(_e))
print ("_c = " + str(_c))

# N = 14922959775784066499316528935316325825140011208871830627653191549546959775167708525042423039865322548420928571524120743831693550123563493981797950912895893476200447083386549353336086899064921878582074346791320104106139965010480614879592357793053342577850761108944086318475849882440272688246818022209356852924215237481460229377544297224983887026669222885987323082324044645883070916243439521809702674295469253723616677245762242494478587807402688474176102093482019417118703747411862420536240611089529331148684440513934609412884941091651594861530606086982174862461739604705354416587503836130151492937714365614194583664241
# e2 = 27188825731727584656624712988703151030126350536157477591935558508817722580343689565924329442151239649607993377452763119541243174650065563589438911911135278704499670302489754540301886312489410648471922645773506837251600244109619850141762795901696503387880058658061490595034281884089265487336373011424883404499124002441860870291233875045675212355287622948427109362925199018383535259913549859747158348931847041907910313465531703810313472674435425886505383646969400166213185676876969805238803587967334447878968225219769481841748776108219650785975942208190380614555719233460250841332020054797811415069533137170950762289
# c = 6472367338832635906896423990323542537663849304314171581554107495210830026660211696089062916158894195561723047864604633460433867838687338370676287160274165915800235253640690510046066541445140501917731026596427080558567366267665887665459901724487706983166070740324307268574128474775026837827907818762764766069631267853742422247229582756256253175941899099898884656334598790711379305490419932664114615010382094572854799421891622789614614720442708271653376485660139560819668239118588069312179293488684403404385715780406937817124588773689921642802703005341324008483201528345805611493251791950304129082313093168732415486813
# _n = 440489238264900860776949063845200558734341182253911040104689726634414488997095518284964514078079911856352824174173937251558842251349762631716798307360995414545464514355957499460396352456341058329671470384493547042182238690727766731554287411757022792467324815342497916894285866240516524768645049867582541899123632009100512965460004548382054578461249990158442675234477122521189649316341623637146867589119951831385717513964941787562068891523060843170463600255518728070958509224053460041184869943038887434435024428311063533345514827827485121055022245800823723487812635502090530820946638405345755666124356919178290008475459419571761406117827422883820901663916276191422633940699113760516149002609672230610575442643822241126824287790055264162725209120192661985259423924307785452001927701323647247782658775780117642900694831475681037634691806232211286493187121464506122012889644137364079403183353774265910554863733455161820449073656744610495110838881353269890437984975607744603113572453211439334880155671730821755361054781243639407912133971530394031933785051770725331242932929244719594830548310768937037042243794551163891451545574837838357398072638709907958216067999891842395376953596940377457308329336524488962532620850237570279134567668379
# _e = 861605654852236668414010386016782729745549477722901970933220380452652052018502113737968204529790495739233258572209422774257139256367928649554562561889013164344608269555777150446651170697255381344437283003508476336814132594917061838422072660017477530465048729471603537912401826065081663165440462979219418291010867656746870617893935758241591032350010782861988742885918015532494020406350897048575155800941991107973433915573030255070411073793489218782862225921465295055907689734413881263179029741870520797816282420230090879687287575328294171448819803530205292587159921154471289747571107461754730577787617451127061265552788125691266357724955508391085485034126227212788895416902189479587194999818764639403752596165043883295506465916277734482380252399557395621566461322664559344483889187037851178431011220134914560438657522787409632677020269086895142488669203469256629173438313487046130238010206678820035631793666627274457756812810094004185303422637897314225624079032617334487815628021058997628511963565055629435278956251869329025544623291223984190562109149316159243565323565271491356378189561005084676592786453581431393651385181326525455441155960432946682976515756161038293313433862078763004704003356983371787414787104076401121444383911561
# _c = 305937839546594439230463861584604201077374759167468410827830943528403007941779658881672477705113617614828611332427199124217887937391378281943856159571057598203709366891547401974326016980711130197275312149966105151573748299654404630150641461765232935912266448303266990247145252052886920248198006212876273661195636104435277145396636985516064154534488750879453474211852461463041960835745695368577903786702607508492658563272121038693371752289017330781719235752018697635304458321008407930986565779826278048082764754367267460637798512780153281325733348999426407049795270044819657399403071013496169060640127279409914638535996355848933378734045908205536540619564723586905257569498716707820544351092379516465943537383422680357333849248129118148543389733395686399565999586899123087310025442994131218237679518267106194962305629529210402269726736072967966518381350920965727690274018080619332676536005722214955949897632990356174168234408837737546230730400434240785496100281815168806724358191550743656843853383646410487436540166360406982096949178466861150173527305369007546917550634679211293496458282787881244581230558011582720632502886494712233308474151958909251857281750741736910202763888790654287328846201724930302778996046434656839999091303411

题目分析

很明显如果可以求得lcm就可以求得d,然后就成功得到flag了。
要求lcm就需要去知道e1.e2的值,其中e2的值已知,所以我们需要去求e1。

解题过程

已知’_e’
_e=bytes_to_long(des_encrypt(long_to_bytes(t)))
key=abcdefgh
先把被des加密的t求一下

from Crypto.Cipher import DES
from Crypto.Util.number import *

key = "abcdefgh"

_e = 861605654852236668414010386016782729745549477722901970933220380452652052018502113737968204529790495739233258572209422774257139256367928649554562561889013164344608269555777150446651170697255381344437283003508476336814132594917061838422072660017477530465048729471603537912401826065081663165440462979219418291010867656746870617893935758241591032350010782861988742885918015532494020406350897048575155800941991107973433915573030255070411073793489218782862225921465295055907689734413881263179029741870520797816282420230090879687287575328294171448819803530205292587159921154471289747571107461754730577787617451127061265552788125691266357724955508391085485034126227212788895416902189479587194999818764639403752596165043883295506465916277734482380252399557395621566461322664559344483889187037851178431011220134914560438657522787409632677020269086895142488669203469256629173438313487046130238010206678820035631793666627274457756812810094004185303422637897314225624079032617334487815628021058997628511963565055629435278956251869329025544623291223984190562109149316159243565323565271491356378189561005084676592786453581431393651385181326525455441155960432946682976515756161038293313433862078763004704003356983371787414787104076401121444383911561

def des_decrypt(c):
    des = DES.new(key.encode(), DES.MODE_ECB)
    res = des.decrypt(c)
    return res

t=bytes_to_long( des_decrypt(long_to_bytes(_e)))
print(t)

下面应该是要求e1然后进一步求lcm然后就得解了
求得t=95561077216813061093181320007007822986977895140874131099651357293153469665985877021866332828401466407289804262775293408866571597577852916392453434207623112450456933578949882413180762392796142573888818744053324165181879738745067822187821160977682158500905389529298716660344906259170939224956446174851792544356916552655577396726346832470867379266272057187231621550467540210563082235337547049339492207128678410950609737909165793025352524239718907267923713341963743809851078745880156610395788585427254471183083810863192809949371296743108500870594429649912233924671048180143115272630768524104476839006356939774781819753842732312258783446491619917762877500067537718143627060325885778186724668792644764125146198051709474581872074672249365471780103506531019122649167172880348207935636425183336991222058612523765477463260317855502969053328081643638463958673951014831686528841521488272557375564850158516017614029016085118775220628257863605306771875817975334133115159010799064014728368132063255201160835624658719601952075887933444823138668322674129291230227512884100618628215682095618509398936684522922847379029893559636668662956265516854078101663422142339548663584652990191097686341481312546863425884995974110189620698700581768423408658424277

又因为t = gmpy2.invert(u, phi_n) 可知t*u模phi_n=1,已知n和t我们可以用用winner攻击求出d,也就是u,
已知t,u,n#n=_n,可以模数分解求出组成_n的p,q也就可以求出e1了。

import gmpy2

# numerator(n):分子, denominator(d):分母
def t_cf(n, d):  # 将分数 x/y 转为连分数的形式
    res = []
    while d:
        res.append(n // d)
        n, d = d, n % d
    return res


def cf(sub_res):    # 得到渐进分数的分母和分子
    n, d = 1, 0
    for i in sub_res[::-1]:  # 从后面往前循环
        d, n = n, i * n + d
    return d, n


def list_fraction(x, y):     # 列出每个渐进分数
    res = t_cf(x, y)
    res = list(map(cf, (res[0:i] for i in range(1, len(res)))))  # 将连分数的结果逐一截取以求渐进分数
    return res


def get_pq(a, b, c):  # 由p+q和pq的值通过维达定理来求解p和q(解二元一次方程)
    par = gmpy2.isqrt(b * b - 4 * a * c)  # 由上述可得,开根号一定是整数,因为有解
    x1, x2 = (-b + par) // (2 * a), (-b - par) // (2 * a)
    return x1, x2


def wienerAttack(e, n):
    for (d, k) in list_fraction(e, n):  # 用一个for循环来注意试探e/n的连续函数的渐进分数,直到找到一个满足条件的渐进分数
        if k == 0:  # 可能会出现连分数的第一个为0的情况,排除
            continue
        if (e * d - 1) % k != 0:  # ed=1 (mod φ(n)) 因此如果找到了d的话,(ed-1)会整除φ(n),也就是存在k使得(e*d-1)//k=φ(n)
            continue

        phi = (e * d - 1) // k  # 这个结果就是 φ(n)
       
        px, qy = get_pq(1, n - phi + 1, n)

        if px * qy == n:
            p, q = abs(int(px)), abs(int(qy))  # 可能会得到两个负数,负负得正未尝不会出现
            d = gmpy2.invert(e, (p - 1) * (q - 1))  # 求ed=1 (mod  φ(n))的结果,也就是e关于 φ(n)的乘法逆元d
            return d
    print("求解d失败")
_n = 440489238264900860776949063845200558734341182253911040104689726634414488997095518284964514078079911856352824174173937251558842251349762631716798307360995414545464514355957499460396352456341058329671470384493547042182238690727766731554287411757022792467324815342497916894285866240516524768645049867582541899123632009100512965460004548382054578461249990158442675234477122521189649316341623637146867589119951831385717513964941787562068891523060843170463600255518728070958509224053460041184869943038887434435024428311063533345514827827485121055022245800823723487812635502090530820946638405345755666124356919178290008475459419571761406117827422883820901663916276191422633940699113760516149002609672230610575442643822241126824287790055264162725209120192661985259423924307785452001927701323647247782658775780117642900694831475681037634691806232211286493187121464506122012889644137364079403183353774265910554863733455161820449073656744610495110838881353269890437984975607744603113572453211439334880155671730821755361054781243639407912133971530394031933785051770725331242932929244719594830548310768937037042243794551163891451545574837838357398072638709907958216067999891842395376953596940377457308329336524488962532620850237570279134567668379
t = 95561077216813061093181320007007822986977895140874131099651357293153469665985877021866332828401466407289804262775293408866571597577852916392453434207623112450456933578949882413180762392796142573888818744053324165181879738745067822187821160977682158500905389529298716660344906259170939224956446174851792544356916552655577396726346832470867379266272057187231621550467540210563082235337547049339492207128678410950609737909165793025352524239718907267923713341963743809851078745880156610395788585427254471183083810863192809949371296743108500870594429649912233924671048180143115272630768524104476839006356939774781819753842732312258783446491619917762877500067537718143627060325885778186724668792644764125146198051709474581872074672249365471780103506531019122649167172880348207935636425183336991222058612523765477463260317855502969053328081643638463958673951014831686528841521488272557375564850158516017614029016085118775220628257863605306771875817975334133115159010799064014728368132063255201160835624658719601952075887933444823138668322674129291230227512884100618628215682095618509398936684522922847379029893559636668662956265516854078101663422142339548663584652990191097686341481312546863425884995974110189620698700581768423408658424277
print('d=',wienerAttack(t,_n))

使用上面的winner攻击脚本解出u的值
u=11797660359487393794703501696733722234597800563221644744216546283873417801358839752749644652587148151353963016872894291750625278074742782471171817895256720486745393451876158473621006168530167397313514152556156473219068407536794185608357374065375644916773016430063167943099951326297693

然后求p,q

import random  
def gcd(a, b):  
   if a < b:  
     a, b = b, a  
   while b != 0:  
     temp = a % b  
     a = b  
     b = temp  
   return a  
def getpq(n,e,d):  
    p = 1  
    q = 1  
    while p==1 and q==1:  
        k = d * e - 1  
        g = random.randint ( 0 , n )  
        while p==1 and q==1 and k % 2 == 0:  
            k /= 2  
            y = pow(g,k,n)  
            if y!=1 and gcd(y-1,n)>1:  
                p = gcd(y-1,n)  
                q = n/p  
    return p,q  
_n=440489238264900860776949063845200558734341182253911040104689726634414488997095518284964514078079911856352824174173937251558842251349762631716798307360995414545464514355957499460396352456341058329671470384493547042182238690727766731554287411757022792467324815342497916894285866240516524768645049867582541899123632009100512965460004548382054578461249990158442675234477122521189649316341623637146867589119951831385717513964941787562068891523060843170463600255518728070958509224053460041184869943038887434435024428311063533345514827827485121055022245800823723487812635502090530820946638405345755666124356919178290008475459419571761406117827422883820901663916276191422633940699113760516149002609672230610575442643822241126824287790055264162725209120192661985259423924307785452001927701323647247782658775780117642900694831475681037634691806232211286493187121464506122012889644137364079403183353774265910554863733455161820449073656744610495110838881353269890437984975607744603113572453211439334880155671730821755361054781243639407912133971530394031933785051770725331242932929244719594830548310768937037042243794551163891451545574837838357398072638709907958216067999891842395376953596940377457308329336524488962532620850237570279134567668379
t=95561077216813061093181320007007822986977895140874131099651357293153469665985877021866332828401466407289804262775293408866571597577852916392453434207623112450456933578949882413180762392796142573888818744053324165181879738745067822187821160977682158500905389529298716660344906259170939224956446174851792544356916552655577396726346832470867379266272057187231621550467540210563082235337547049339492207128678410950609737909165793025352524239718907267923713341963743809851078745880156610395788585427254471183083810863192809949371296743108500870594429649912233924671048180143115272630768524104476839006356939774781819753842732312258783446491619917762877500067537718143627060325885778186724668792644764125146198051709474581872074672249365471780103506531019122649167172880348207935636425183336991222058612523765477463260317855502969053328081643638463958673951014831686528841521488272557375564850158516017614029016085118775220628257863605306771875817975334133115159010799064014728368132063255201160835624658719601952075887933444823138668322674129291230227512884100618628215682095618509398936684522922847379029893559636668662956265516854078101663422142339548663584652990191097686341481312546863425884995974110189620698700581768423408658424277
u=11797660359487393794703501696733722234597800563221644744216546283873417801358839752749644652587148151353963016872894291750625278074742782471171817895256720486745393451876158473621006168530167397313514152556156473219068407536794185608357374065375644916773016430063167943099951326297693
p,q=getpq(_n,u,t)
print('p=',p)
print('\n')
print('q=',q)

求得p= 19264953060573354152088370022137347843372038705938727274045584770270219723662509372257332556183567230642343935007604082786773908834507689431186383412071058259541476266919416080039861225024448531158114574145554564022730469627597355435270855539517518409560015216943685471530116511513636272584701192733011822927999470250332801570140194232021468626841753869502055761504745759903801611113500391141999619442402277579074037471801982605177523331564583853413101873539220382589923070411342245074186744665659067941370003705158001680825380979002436082583656772216545995937793154893096726159238228165855471788102432999738097158731
q= 22864796860906093199694067991790516555118020107383902324997352449757876818212314084781017210865185869334088946871030984503845304362374554974827811579121746069166015978145633260111202926557204230850698926092200533444144199730624941169883034998427847708114417543702835167646938045946842671828420614018770449420415232485596848779660303926871762030451031914921298265052938388183729420238858156081251210048035031998247354995627059059169910852997407613286110114801656460573047520996236216358033966503419383064725149303693997672994102704389524362390287055938893747286925709016491994129007736211787027450456149376729714605809
然后求_d ,并且求得e1

import gmpy2
p= 19264953060573354152088370022137347843372038705938727274045584770270219723662509372257332556183567230642343935007604082786773908834507689431186383412071058259541476266919416080039861225024448531158114574145554564022730469627597355435270855539517518409560015216943685471530116511513636272584701192733011822927999470250332801570140194232021468626841753869502055761504745759903801611113500391141999619442402277579074037471801982605177523331564583853413101873539220382589923070411342245074186744665659067941370003705158001680825380979002436082583656772216545995937793154893096726159238228165855471788102432999738097158731
q= 22864796860906093199694067991790516555118020107383902324997352449757876818212314084781017210865185869334088946871030984503845304362374554974827811579121746069166015978145633260111202926557204230850698926092200533444144199730624941169883034998427847708114417543702835167646938045946842671828420614018770449420415232485596848779660303926871762030451031914921298265052938388183729420238858156081251210048035031998247354995627059059169910852997407613286110114801656460573047520996236216358033966503419383064725149303693997672994102704389524362390287055938893747286925709016491994129007736211787027450456149376729714605809   
_n = 440489238264900860776949063845200558734341182253911040104689726634414488997095518284964514078079911856352824174173937251558842251349762631716798307360995414545464514355957499460396352456341058329671470384493547042182238690727766731554287411757022792467324815342497916894285866240516524768645049867582541899123632009100512965460004548382054578461249990158442675234477122521189649316341623637146867589119951831385717513964941787562068891523060843170463600255518728070958509224053460041184869943038887434435024428311063533345514827827485121055022245800823723487812635502090530820946638405345755666124356919178290008475459419571761406117827422883820901663916276191422633940699113760516149002609672230610575442643822241126824287790055264162725209120192661985259423924307785452001927701323647247782658775780117642900694831475681037634691806232211286493187121464506122012889644137364079403183353774265910554863733455161820449073656744610495110838881353269890437984975607744603113572453211439334880155671730821755361054781243639407912133971530394031933785051770725331242932929244719594830548310768937037042243794551163891451545574837838357398072638709907958216067999891842395376953596940377457308329336524488962532620850237570279134567668379
_e = 861605654852236668414010386016782729745549477722901970933220380452652052018502113737968204529790495739233258572209422774257139256367928649554562561889013164344608269555777150446651170697255381344437283003508476336814132594917061838422072660017477530465048729471603537912401826065081663165440462979219418291010867656746870617893935758241591032350010782861988742885918015532494020406350897048575155800941991107973433915573030255070411073793489218782862225921465295055907689734413881263179029741870520797816282420230090879687287575328294171448819803530205292587159921154471289747571107461754730577787617451127061265552788125691266357724955508391085485034126227212788895416902189479587194999818764639403752596165043883295506465916277734482380252399557395621566461322664559344483889187037851178431011220134914560438657522787409632677020269086895142488669203469256629173438313487046130238010206678820035631793666627274457756812810094004185303422637897314225624079032617334487815628021058997628511963565055629435278956251869329025544623291223984190562109149316159243565323565271491356378189561005084676592786453581431393651385181326525455441155960432946682976515756161038293313433862078763004704003356983371787414787104076401121444383911561
_c = 305937839546594439230463861584604201077374759167468410827830943528403007941779658881672477705113617614828611332427199124217887937391378281943856159571057598203709366891547401974326016980711130197275312149966105151573748299654404630150641461765232935912266448303266990247145252052886920248198006212876273661195636104435277145396636985516064154534488750879453474211852461463041960835745695368577903786702607508492658563272121038693371752289017330781719235752018697635304458321008407930986565779826278048082764754367267460637798512780153281325733348999426407049795270044819657399403071013496169060640127279409914638535996355848933378734045908205536540619564723586905257569498716707820544351092379516465943537383422680357333849248129118148543389733395686399565999586899123087310025442994131218237679518267106194962305629529210402269726736072967966518381350920965727690274018080619332676536005722214955949897632990356174168234408837737546230730400434240785496100281815168806724358191550743656843853383646410487436540166360406982096949178466861150173527305369007546917550634679211293496458282787881244581230558011582720632502886494712233308474151958909251857281750741736910202763888790654287328846201724930302778996046434656839999091303411

phi_n=(p-1)*(q-1)
_d=gmpy2.invert(_e,phi_n)
e1=pow(_c,_d,_n)
print(e1)    

求得
e1=114552459553730357961013268333698879659007919035942930313432809776799669181481660306531243618160127922304264986001501784564575128319884991774542682853466808329973362019677284072646678280051091964555611220961719302320547405880386113519147076299481594997799884384012548506240748042365643212774215730304047871679706035596550898944580314923260982768858133395187777029914150064371998328788068888440803565964567662563652062845388379897799506439389461619422933318625765603423604615137217375612091221578339493263160670355032898186792479034771118678394464854413824347305505135625135428816394053078365603937337271798774138959

现在我们已知e1,e2,N,E,C求得M就可以得到flag了。
e1 = gmpy2.invert(getPrime(730), lcm)
e2 = gmpy2.invert(getPrime(730), lcm)
这是和拓展维纳攻击相符的

然后需要在sage里面运行代码。
可以在kali里面直接用sage或者在在线环境Sage Cell Server (sagemath.org)

from gmpy2 import invert
c = 6472367338832635906896423990323542537663849304314171581554107495210830026660211696089062916158894195561723047864604633460433867838687338370676287160274165915800235253640690510046066541445140501917731026596427080558567366267665887665459901724487706983166070740324307268574128474775026837827907818762764766069631267853742422247229582756256253175941899099898884656334598790711379305490419932664114615010382094572854799421891622789614614720442708271653376485660139560819668239118588069312179293488684403404385715780406937817124588773689921642802703005341324008483201528345805611493251791950304129082313093168732415486813
e2 = 27188825731727584656624712988703151030126350536157477591935558508817722580343689565924329442151239649607993377452763119541243174650065563589438911911135278704499670302489754540301886312489410648471922645773506837251600244109619850141762795901696503387880058658061490595034281884089265487336373011424883404499124002441860870291233875045675212355287622948427109362925199018383535259913549859747158348931847041907910313465531703810313472674435425886505383646969400166213185676876969805238803587967334447878968225219769481841748776108219650785975942208190380614555719233460250841332020054797811415069533137170950762289
e1 = 114552459553730357961013268333698879659007919035942930313432809776799669181481660306531243618160127922304264986001501784564575128319884991774542682853466808329973362019677284072646678280051091964555611220961719302320547405880386113519147076299481594997799884384012548506240748042365643212774215730304047871679706035596550898944580314923260982768858133395187777029914150064371998328788068888440803565964567662563652062845388379897799506439389461619422933318625765603423604615137217375612091221578339493263160670355032898186792479034771118678394464854413824347305505135625135428816394053078365603937337271798774138959
N  = 14922959775784066499316528935316325825140011208871830627653191549546959775167708525042423039865322548420928571524120743831693550123563493981797950912895893476200447083386549353336086899064921878582074346791320104106139965010480614879592357793053342577850761108944086318475849882440272688246818022209356852924215237481460229377544297224983887026669222885987323082324044645883070916243439521809702674295469253723616677245762242494478587807402688474176102093482019417118703747411862420536240611089529331148684440513934609412884941091651594861530606086982174862461739604705354416587503836130151492937714365614194583664241
a  = 5./14
M1=N**0.5
M2= N **(a+1)
D = diagonal_matrix(ZZ,[N,M1,M2,1])
M=matrix(ZZ,[[1,-N,0,N**2],[0,e1,-e1,-e1*N],[0,0,e2,-e2*N],[0,0,0,e1*e2]])*D
L=M.LLL()
t=vector(ZZ,L[0])
x=t*M**(-1)
phi = int(x[1]/x[0]*e1)
d = invert(0x10001,phi)
m=pow(c,d,N)
print(m)

#b'GWHT{3da44ca8379b98fdc1c86f9b34dcc1ef}'

得到m=9082754779802416065229245885387712939943943582794993779715278978532329981453479995551082109

然后用libnum.n2s(m)或者

from Crypto.Util.number import *
print(long_to_bytes(9082754779802416065229245885387712939943943582794993779715278978532329981453479995551082109))

然后得到flag

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值