2025能源网络安全大赛CTF,crypto,电网组

超递增序列

from secret import flag
from Crypto.Util.number import getPrime

flag = bin(int.from_bytes(flag, 'big'))[2:]

private_key = []
g = getPrime(10)
private_key.append(g)
for i in range(len(flag) - 1):
    g = g * 2
    private_key.append(g)

a = getPrime(20)
b = getPrime(len(flag) + 20)
public_key = []
for i in private_key:
    public_key.append((a * i) % b)
print(public_key)

c = 0
for i in range(len(flag)):
    c += int(str(flag)[i])*public_key[i]
print(c)

'''
[771305309, 1542610618, 3085221236, 6170442472, 12340884944, 24681769888, 49363539776, 98727079552, 197454159104, 394908318208, 789816636416, 1579633272832, 3159266545664, 6318533091328, 12637066182656, 25274132365312, 50548264730624, 101096529461248, 202193058922496, 404386117844992, 808772235689984, 1617544471379968, 3235088942759936, 6470177885519872, 12940355771039744, 25880711542079488, 51761423084158976, 103522846168317952, 207045692336635904, 414091384673271808, 828182769346543616, 1656365538693087232, 3312731077386174464, 6625462154772348928, 13250924309544697856, 26501848619089395712, 53003697238178791424, 106007394476357582848, 212014788952715165696, 424029577905430331392, 848059155810860662784, 1696118311621721325568, 3392236623243442651136, 6784473246486885302272, 13568946492973770604544, 27137892985947541209088, 54275785971895082418176, 108551571943790164836352, 217103143887580329672704, 434206287775160659345408, 868412575550321318690816, 1736825151100642637381632, 3473650302201285274763264, 6947300604402570549526528, 13894601208805141099053056, 27789202417610282198106112, 55578404835220564396212224, 111156809670441128792424448, 222313619340882257584848896, 444627238681764515169697792, 889254477363529030339395584, 1778508954727058060678791168, 3557017909454116121357582336, 7114035818908232242715164672, 14228071637816464485430329344, 28456143275632928970860658688, 56912286551265857941721317376, 113824573102531715883442634752, 227649146205063431766885269504, 455298292410126863533770539008, 910596584820253727067541078016, 1821193169640507454135082156032, 3642386339281014908270164312064, 7284772678562029816540328624128, 14569545357124059633080657248256, 29139090714248119266161314496512, 58278181428496238532322628993024, 116556362856992477064645257986048, 233112725713984954129290515972096, 466225451427969908258581031944192, 932450902855939816517162063888384, 1864901805711879633034324127776768, 3729803611423759266068648255553536, 7459607222847518532137296511107072, 14919214445695037064274593022214144, 29838428891390074128549186044428288, 59676857782780148257098372088856576, 119353715565560296514196744177713152, 238707431131120593028393488355426304, 477414862262241186056786976710852608, 954829724524482372113573953421705216, 1909659449048964744227147906843410432, 3819318898097929488454295813686820864, 7638637796195858976908591627373641728, 15277275592391717953817183254747283456, 30554551184783435907634366509494566912, 61109102369566871815268733018989133824, 122218204739133743630537466037978267648, 244436409478267487261074932075956535296, 488872818956534974522149864151913070592, 977745637913069949044299728303826141184, 1955491275826139898088599456607652282368, 3910982551652279796177198913215304564736, 7821965103304559592354397826430609129472, 15643930206609119184708795652861218258944, 31287860413218238369417591305722436517888, 62575720826436476738835182611444873035776, 125151441652872953477670365222889746071552, 250302883305745906955340730445779492143104, 500605766611491813910681460891558984286208, 1001211533222983627821362921783117968572416, 2002423066445967255642725843566235937144832, 4004846132891934511285451687132471874289664, 8009692265783869022570903374264943748579328, 16019384531567738045141806748529887497158656, 32038769063135476090283613497059774994317312, 64077538126270952180567226994119549988634624, 128155076252541904361134453988239099977269248, 256310152505083808722268907976478199954538496, 512620305010167617444537815952956399909076992, 1025240610020335234889075631905912799818153984, 2050481220040670469778151263811825599636307968, 4100962440081340939556302527623651199272615936, 8201924880162681879112605055247302398545231872, 16403849760325363758225210110494604797090463744, 32807699520650727516450420220989209594180927488, 65615399041301455032900840441978419188361854976, 131230798082602910065801680883956838376723709952, 262461596165205820131603361767913676753447419904, 524923192330411640263206723535827353506894839808, 1049846384660823280526413447071654707013789679616, 2099692769321646561052826894143309414027579359232, 4199385538643293122105653788286618828055158718464, 8398771077286586244211307576573237656110317436928, 16797542154573172488422615153146475312220634873856, 33595084309146344976845230306292950624441269747712, 67190168618292689953690460612585901248882539495424, 134380337236585379907380921225171802497765078990848, 268760674473170759814761842450343604995530157981696, 537521348946341519629523684900687209991060315963392, 1075042697892683039259047369801374419982120631926784, 2150085395785366078518094739602748839964241263853568, 4300170791570732157036189479205497679928482527707136, 8600341583141464314072378958410995359856965055414272, 17200683166282928628144757916821990719713930110828544, 34401366332565857256289515833643981439427860221657088, 68802732665131714512579031667287962878855720443314176, 137605465330263429025158063334575925757711440886628352, 275210930660526858050316126669151851515422881773256704, 550421861321053716100632253338303703030845763546513408, 1100843722642107432201264506676607406061691527093026816, 2201687445284214864402529013353214812123383054186053632, 4403374890568429728805058026706429624246766108372107264, 8806749781136859457610116053412859248493532216744214528, 17613499562273718915220232106825718496987064433488429056, 35226999124547437830440464213651436993974128866976858112, 70453998249094875660880928427302873987948257733953716224, 140907996498189751321761856854605747975896515467907432448, 281815992996379502643523713709211495951793030935814864896, 563631985992759005287047427418422991903586061871629729792, 1127263971985518010574094854836845983807172123743259459584, 2254527943971036021148189709673691967614344247486518919168, 4509055887942072042296379419347383935228688494973037838336, 9018111775884144084592758838694767870457376989946075676672, 18036223551768288169185517677389535740914753979892151353344, 36072447103536576338371035354779071481829507959784302706688, 72144894207073152676742070709558142963659015919568605413376, 144289788414146305353484141419116285927318031839137210826752, 288579576828292610706968282838232571854636063678274421653504, 577159153656585221413936565676465143709272127356548843307008, 1154318307313170442827873131352930287418544254713097686614016, 2308636614626340885655746262705860574837088509426195373228032, 4617273229252681771311492525411721149674177018852390746456064, 9234546458505363542622985050823442299348354037704781492912128, 18469092917010727085245970101646884598696708075409562985824256, 36938185834021454170491940203293769197393416150819125971648512, 73876371668042908340983880406587538394786832301638251943297024, 147752743336085816681967760813175076789573664603276503886594048, 295505486672171633363935521626350153579147329206553007773188096, 591010973344343266727871043252700307158294658413106015546376192, 1182021946688686533455742086505400614316589316826212031092752384, 2364043893377373066911484173010801228633178633652424062185504768, 1570172468221642611273039787509382163983004490403990099791687525, 3140344936443285222546079575018764327966008980807980199583375050, 3122774554353466922542230591525308362648665184715102374587428089, 3087633790173830322534532624538396432013977592529346724595534167, 3017352261814557122519136690564572570744602408157835424611746323, 2876789205096010722488344822616924848205852039414812824644170635, 2595663091658917922426761086721629403128351301928767624709019259, 2033410864784732322303593614931038512973349826956677224838716507, 908906411036361122057258671349856732663346877012496425098111003]
17629195582022026559122809022510717608565370656267988226648332400
'''

solve

import math
from Crypto.Util.number import inverse, long_to_bytes

public_key=\
[771305309, 1542610618, 3085221236, 6170442472, 12340884944, 24681769888, 49363539776, 98727079552, 197454159104, 394908318208, 789816636416, 1579633272832, 3159266545664, 6318533091328, 12637066182656, 25274132365312, 50548264730624, 101096529461248, 202193058922496, 404386117844992, 808772235689984, 1617544471379968, 3235088942759936, 6470177885519872, 12940355771039744, 25880711542079488, 51761423084158976, 103522846168317952, 207045692336635904, 414091384673271808, 828182769346543616, 1656365538693087232, 3312731077386174464, 6625462154772348928, 13250924309544697856, 26501848619089395712, 53003697238178791424, 106007394476357582848, 212014788952715165696, 424029577905430331392, 848059155810860662784, 1696118311621721325568, 3392236623243442651136, 6784473246486885302272, 13568946492973770604544, 27137892985947541209088, 54275785971895082418176, 108551571943790164836352, 217103143887580329672704, 434206287775160659345408, 868412575550321318690816, 1736825151100642637381632, 3473650302201285274763264, 6947300604402570549526528, 13894601208805141099053056, 27789202417610282198106112, 55578404835220564396212224, 111156809670441128792424448, 222313619340882257584848896, 444627238681764515169697792, 889254477363529030339395584, 1778508954727058060678791168, 3557017909454116121357582336, 7114035818908232242715164672, 14228071637816464485430329344, 28456143275632928970860658688, 56912286551265857941721317376, 113824573102531715883442634752, 227649146205063431766885269504, 455298292410126863533770539008, 910596584820253727067541078016, 1821193169640507454135082156032, 3642386339281014908270164312064, 7284772678562029816540328624128, 14569545357124059633080657248256, 29139090714248119266161314496512, 58278181428496238532322628993024, 116556362856992477064645257986048, 233112725713984954129290515972096, 466225451427969908258581031944192, 932450902855939816517162063888384, 1864901805711879633034324127776768, 3729803611423759266068648255553536, 7459607222847518532137296511107072, 14919214445695037064274593022214144, 29838428891390074128549186044428288, 59676857782780148257098372088856576, 119353715565560296514196744177713152, 238707431131120593028393488355426304, 477414862262241186056786976710852608, 954829724524482372113573953421705216, 1909659449048964744227147906843410432, 3819318898097929488454295813686820864, 7638637796195858976908591627373641728, 15277275592391717953817183254747283456, 30554551184783435907634366509494566912, 61109102369566871815268733018989133824, 122218204739133743630537466037978267648, 244436409478267487261074932075956535296, 488872818956534974522149864151913070592, 977745637913069949044299728303826141184, 1955491275826139898088599456607652282368, 3910982551652279796177198913215304564736, 7821965103304559592354397826430609129472, 15643930206609119184708795652861218258944, 31287860413218238369417591305722436517888, 62575720826436476738835182611444873035776, 125151441652872953477670365222889746071552, 250302883305745906955340730445779492143104, 500605766611491813910681460891558984286208, 1001211533222983627821362921783117968572416, 2002423066445967255642725843566235937144832, 4004846132891934511285451687132471874289664, 8009692265783869022570903374264943748579328, 16019384531567738045141806748529887497158656, 32038769063135476090283613497059774994317312, 64077538126270952180567226994119549988634624, 128155076252541904361134453988239099977269248, 256310152505083808722268907976478199954538496, 512620305010167617444537815952956399909076992, 1025240610020335234889075631905912799818153984, 2050481220040670469778151263811825599636307968, 4100962440081340939556302527623651199272615936, 8201924880162681879112605055247302398545231872, 16403849760325363758225210110494604797090463744, 32807699520650727516450420220989209594180927488, 65615399041301455032900840441978419188361854976, 131230798082602910065801680883956838376723709952, 262461596165205820131603361767913676753447419904, 524923192330411640263206723535827353506894839808, 1049846384660823280526413447071654707013789679616, 2099692769321646561052826894143309414027579359232, 4199385538643293122105653788286618828055158718464, 8398771077286586244211307576573237656110317436928, 16797542154573172488422615153146475312220634873856, 33595084309146344976845230306292950624441269747712, 67190168618292689953690460612585901248882539495424, 134380337236585379907380921225171802497765078990848, 268760674473170759814761842450343604995530157981696, 537521348946341519629523684900687209991060315963392, 1075042697892683039259047369801374419982120631926784, 2150085395785366078518094739602748839964241263853568, 4300170791570732157036189479205497679928482527707136, 8600341583141464314072378958410995359856965055414272, 17200683166282928628144757916821990719713930110828544, 34401366332565857256289515833643981439427860221657088, 68802732665131714512579031667287962878855720443314176, 137605465330263429025158063334575925757711440886628352, 275210930660526858050316126669151851515422881773256704, 550421861321053716100632253338303703030845763546513408, 1100843722642107432201264506676607406061691527093026816, 2201687445284214864402529013353214812123383054186053632, 4403374890568429728805058026706429624246766108372107264, 8806749781136859457610116053412859248493532216744214528, 17613499562273718915220232106825718496987064433488429056, 35226999124547437830440464213651436993974128866976858112, 70453998249094875660880928427302873987948257733953716224, 140907996498189751321761856854605747975896515467907432448, 281815992996379502643523713709211495951793030935814864896, 563631985992759005287047427418422991903586061871629729792, 1127263971985518010574094854836845983807172123743259459584, 2254527943971036021148189709673691967614344247486518919168, 4509055887942072042296379419347383935228688494973037838336, 9018111775884144084592758838694767870457376989946075676672, 18036223551768288169185517677389535740914753979892151353344, 36072447103536576338371035354779071481829507959784302706688, 72144894207073152676742070709558142963659015919568605413376, 144289788414146305353484141419116285927318031839137210826752, 288579576828292610706968282838232571854636063678274421653504, 577159153656585221413936565676465143709272127356548843307008, 1154318307313170442827873131352930287418544254713097686614016, 2308636614626340885655746262705860574837088509426195373228032, 4617273229252681771311492525411721149674177018852390746456064, 9234546458505363542622985050823442299348354037704781492912128, 18469092917010727085245970101646884598696708075409562985824256, 36938185834021454170491940203293769197393416150819125971648512, 73876371668042908340983880406587538394786832301638251943297024, 147752743336085816681967760813175076789573664603276503886594048, 295505486672171633363935521626350153579147329206553007773188096, 591010973344343266727871043252700307158294658413106015546376192, 1182021946688686533455742086505400614316589316826212031092752384, 2364043893377373066911484173010801228633178633652424062185504768, 1570172468221642611273039787509382163983004490403990099791687525, 3140344936443285222546079575018764327966008980807980199583375050, 3122774554353466922542230591525308362648665184715102374587428089, 3087633790173830322534532624538396432013977592529346724595534167, 3017352261814557122519136690564572570744602408157835424611746323, 2876789205096010722488344822616924848205852039414812824644170635, 2595663091658917922426761086721629403128351301928767624709019259, 2033410864784732322303593614931038512973349826956677224838716507, 908906411036361122057258671349856732663346877012496425098111003]
c=17629195582022026559122809022510717608565370656267988226648332400            # Replace with your ciphertext

# Step 1: Find b
diffs = []
for i in range(len(public_key) - 1):
    d = 2 * public_key[i] - public_key[i + 1]
    if d != 0:
        diffs.append(abs(d))
b = math.gcd(*diffs)
print(b)
# assert 1==2
# Step 2: Factor public_key[0] to get a and g
ag = public_key[0]

# Factorization logic (replace with your a and g values)
def factor_ag(ag):
    for g in range(2, 2**10):
        if ag % g == 0:
            a = ag // g
            if a.bit_length() == 20:
                return a, g
    raise ValueError("Factorization failed")

a, g = factor_ag(ag)

# Step 3: Generate private key
n = len(public_key)
private_key = [g * (2 ** i) for i in range(n)]

# Step 4: Compute S
a_inv = inverse(a, b)
S = (c * a_inv) % b

# Step 5: Solve superincreasing knapsack
flag_bits = []
for i in reversed(range(n)):
    if S >= private_key[i]:
        flag_bits.append('1')
        S -= private_key[i]
    else:
        flag_bits.append('0')
flag_bits = flag_bits[::-1]

flag = long_to_bytes(int(''.join(flag_bits), 2))
print(flag.decode())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值