moectf2023-crypto复现


ezrot

题目描述:

1
ezrot

rot47解密

最后flag为

1
moectf{rot47_is_just_a_simPle_letter_substitution_ciPher_EDpy5tpe5juNT_}

可可的新围墙

题目描述:

1
可可的新围墙

附件

1
mt3_hsTal3yGnM_p3jocfFn3cp3_hFs3c_3TrB__i3_uBro_lcsOp}e{ciri_hT_avn3Fa_j

栅栏密码,赛博厨子一把梭

最后flag为

1
moectf{F3nc3_ciph3r_shiFTs_3ach_l3TT3r_By_a_Giv3n_nuMB3r_oF_plac3s_Ojpj}

皇帝的新密码

题目描述:

1
皇帝的新密码

附件

1
tvljam{JhLzhL_JPwoLy_Pz_h_cLyF_zPtwPL_JPwoLy!_ZmUVUA40q5KbEQZAK5Ehag4Av}

凯撒密码,随波逐流一把梭

最后flag为

1
moectf{CaEsaE_CIphEr_Is_a_vErY_sImpIE_CIphEr!_SfNONT40j5DuXJSTD5Xatz4To}

不是“皇帝的新密码”

题目描述:

1
不是“皇帝的新密码”

附件

1
2
3
scsfct{wOuSQNfF_IWdkNf_Jy_o_zLchmK_voumSs_zvoQ_loFyof_FRdiKf_4i4x4NLgDn}

md5 of flag (utf-8) `ea23f80270bdd96b5fcd213cae68eea5`

根据flag格式反推密钥是goodjob,维吉尼亚解密,赛博厨子一把梭

最后flag为

1
moectf{vIgENErE_CIphEr_Is_a_lIttlE_hardEr_thaN_caEsar_CIphEr_4u4u4EXfXz}

猫言喵语

题目描述:

1
2
3
狗曰:”喵喵喵喵喵??“

请解出后请转换为全大写,单词间以下划线分隔,套上moectf{}后提交

附件

1
喵喵? 喵喵喵喵喵喵喵喵喵喵喵喵 喵喵喵 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵? 喵喵?喵喵喵喵喵? 喵喵喵喵喵? 喵喵喵喵喵?喵喵? 喵喵喵喵喵? 喵喵喵喵喵喵 喵喵喵喵喵喵 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵? 喵喵?喵喵喵喵喵?喵喵喵 喵喵喵喵喵? 喵喵? 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵? 喵喵?喵喵喵喵喵喵喵喵喵 喵喵喵喵喵喵喵喵? 喵喵? 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵? 喵喵?喵喵喵喵喵喵喵喵喵 喵喵喵 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵? 喵喵?喵喵喵喵喵?喵喵喵 喵喵喵喵喵? 喵喵喵喵喵?喵喵喵喵喵喵 喵喵喵喵喵?喵喵喵喵喵喵 喵喵喵 喵喵?喵喵喵喵喵喵 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵? 喵喵?喵喵?喵喵喵 喵喵?喵喵?喵喵? 喵喵喵喵喵喵喵喵? 喵喵?喵喵?喵喵喵喵喵喵 喵喵喵喵喵喵 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵? 喵喵?喵喵喵喵喵喵喵喵喵 喵喵?喵喵喵喵喵?喵喵? 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵? 喵喵喵喵喵?喵喵喵 喵喵?喵喵喵喵喵喵喵喵?

赛博厨子一把梭

最后flag为

1
moectf{THE_KAWAII_CAT_BUT_BE_CALLED_GOUZI_BY_RX}

crypto指北

题目描述:

1
Crypto 入门指北 flag是例题的flag

运行html文件里的例题脚本

最后flag为

1
moectf{weLCome_To_moeCTf_CRypTo_And_enjoy_THis_gAme!_THis_is_yoUR_fLAg!}

baby_e

题目描述:

1
小小的也很可爱

附件

1
2
3
4
5
6
7
8
9
10
11
12
from Crypto.Util.number import getPrime,bytes_to_long

p,q = getPrime(2048),getPrime(2048)
e = 7
n = p*q
m = bytes_to_long(open('flag.txt','rb').read().strip())
c = pow(m,e,n)
print("c = ",c)
print("n = ",n)

# c = 147693154873835354725007152781732424355869776162377337823960431913672366269917723916891506269449726723757821517328874729037838600793748824028829185409932536014732765063216715033843955453706710187792772702199448156372644163429786386035008302836467605094954587157232829525150652611067567669525072625329634860065850520051628272535479197120008981979404760445193750864902244921407742155742716289495581989134730376783828846663464819337418977287363028738701414486788851136608957124505485242331701209645216580641917007780811842757125048746184068597664780265422321550909392419865169775282217442331295071069272774722564587602419768461231775480847018941840911357926330143045826277813722919121117172763493242590521245640828462665947672485094793188432098216701511715232654611338293295459889814699850788048985878279440740712956248569068077253790198036918598519191892836075254345518967666166925163908185663991353344555402397055977817370082929420443034626201745027965444069777059760865359310439815816749939498993014457995041394803598825093836045546578310632172636478575946653375857640993393714607308326474003446154152048840071034349831168612740218034679021240949747357214453636633636662650940968576792518622437627529244515229173
# n = 553409369582823237678532685244026647155180191225879439432235077135813123637186465008813830373646133388592395760175777499266561095087891764348044063111935877931069321764391883899483374576303169645488542398590564148654412004383012178107972880058460460806768779452529433458826925606225797078653905380530651390617109384086518728626571028089036812787671647095695947167204428442727185744172445701874820612799168887428075695751162763647868386879374037826876671079326544820609721731078985096813307183878793033824330869698508952853770794414757655681370862323768018291030331209143189638496644361618184164228294031490537429556439588954274708598530042700988138862000054458742762198052079867259365645914383561162796796952346445529346145323567650621600171442575319262718389389870407629339714751583360252884338116164466349449862781112019462555743429653595045695696967783338371470032332852204294900011651434678829104876529439166176589508898757122660322523937330848536715937381297551894198974459004139082562228022412335520195652419375915216074658463954339332593244483927157329404652516225481116614815221154229491846087288087715884363786672244655901308480290011237244562251084095684531716327141154558809471185132979704992609461470501119328696999713829

低加密指数攻击

exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from Crypto.Util.number import long_to_bytes
import gmpy2

c = 147693154873835354725007152781732424355869776162377337823960431913672366269917723916891506269449726723757821517328874729037838600793748824028829185409932536014732765063216715033843955453706710187792772702199448156372644163429786386035008302836467605094954587157232829525150652611067567669525072625329634860065850520051628272535479197120008981979404760445193750864902244921407742155742716289495581989134730376783828846663464819337418977287363028738701414486788851136608957124505485242331701209645216580641917007780811842757125048746184068597664780265422321550909392419865169775282217442331295071069272774722564587602419768461231775480847018941840911357926330143045826277813722919121117172763493242590521245640828462665947672485094793188432098216701511715232654611338293295459889814699850788048985878279440740712956248569068077253790198036918598519191892836075254345518967666166925163908185663991353344555402397055977817370082929420443034626201745027965444069777059760865359310439815816749939498993014457995041394803598825093836045546578310632172636478575946653375857640993393714607308326474003446154152048840071034349831168612740218034679021240949747357214453636633636662650940968576792518622437627529244515229173
n = 553409369582823237678532685244026647155180191225879439432235077135813123637186465008813830373646133388592395760175777499266561095087891764348044063111935877931069321764391883899483374576303169645488542398590564148654412004383012178107972880058460460806768779452529433458826925606225797078653905380530651390617109384086518728626571028089036812787671647095695947167204428442727185744172445701874820612799168887428075695751162763647868386879374037826876671079326544820609721731078985096813307183878793033824330869698508952853770794414757655681370862323768018291030331209143189638496644361618184164228294031490537429556439588954274708598530042700988138862000054458742762198052079867259365645914383561162796796952346445529346145323567650621600171442575319262718389389870407629339714751583360252884338116164466349449862781112019462555743429653595045695696967783338371470032332852204294900011651434678829104876529439166176589508898757122660322523937330848536715937381297551894198974459004139082562228022412335520195652419375915216074658463954339332593244483927157329404652516225481116614815221154229491846087288087715884363786672244655901308480290011237244562251084095684531716327141154558809471185132979704992609461470501119328696999713829
e = 7

# 计算 c 的 7 次方根
root, is_exact = gmpy2.iroot(c, e)
if is_exact:
m = int(root)
flag = long_to_bytes(m).decode()
print("Flag:", flag)
else:
print("No solution found.")

运行得到flag

一把梭

最后flag为

1
moectf{SMaLL_3xPon3nt_Mak3_rSa_w3ak!_!lP0iYlJf!M3rux9G9Vf!JoxiMl903lllA}

bad_E

题目描述:

1
你这个e怎么解密不了啊,怎么会事呢?

附件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from Crypto.Util.number import *
p = getPrime(512)
q = getPrime(512)
e = 65537

print(p) # 6853495238262155391975011057929314523706159020478084061020122347902601182448091015650787022962180599741651597328364289413042032923330906135304995252477571
print(q) # 11727544912613560398705401423145382428897876620077115390278679983274961030035884083100580422155496261311510530671232666801444557695190734596546855494472819

with open("flag.txt","r") as fs:
flag = fs.read().strip()

m = bytes_to_long(flag.encode())
c = pow(m,e,p*q)
print(c) # 63388263723813143290256836284084914544524440253054612802424934400854921660916379284754467427040180660945667733359330988361620691457570947823206385692232584893511398038141442606303536260023122774682805630913037113541880875125504376791939861734613177272270414287306054553288162010873808058776206524782351475805

exp1:

1
2
3
4
5
6
7
8
from sympy.ntheory.residue_ntheory import nthroot_mod
from Crypto.Util.number import *
e = 65537
p=6853495238262155391975011057929314523706159020478084061020122347902601182448091015650787022962180599741651597328364289413042032923330906135304995252477571
q=11727544912613560398705401423145382428897876620077115390278679983274961030035884083100580422155496261311510530671232666801444557695190734596546855494472819
c=63388263723813143290256836284084914544524440253054612802424934400854921660916379284754467427040180660945667733359330988361620691457570947823206385692232584893511398038141442606303536260023122774682805630913037113541880875125504376791939861734613177272270414287306054553288162010873808058776206524782351475805
n=p*q
print(long_to_bytes(nthroot_mod(c,e,p))

运行得到

exp2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
from sympy.ntheory.residue_ntheory import nthroot_mod
from Crypto.Util.number import *
from math import gcd

e = 65537
p = 6853495238262155391975011057929314523706159020478084061020122347902601182448091015650787022962180599741651597328364289413042032923330906135304995252477571
q = 11727544912613560398705401423145382428897876620077115390278679983274961030035884083100580422155496261311510530671232666801444557695190734596546855494472819
c = 63388263723813143290256836284084914544524440253054612802424934400854921660916379284754467427040180660945667733359330988361620691457570947823206385692232584893511398038141442606303536260023122774682805630913037113541880875125504376791939861734613177272270414287306054553288162010873808058776206524782351475805
n = p * q

# 计算φ(n)
phi_n = (p - 1) * (q - 1)

# 检查e和φ(n)是否互质
g = gcd(e, phi_n)
print(f"gcd(e, φ(n)) = {g}")

if g != 1:
print("警告: e和φ(n)不互质,RSA私钥不存在标准解")
print("尝试使用中国剩余定理分别在模p和模q下求解...")

# 计算在模p和模q下的n次方根
m_p = nthroot_mod(c, e, p)
m_q = nthroot_mod(c, e, q)

# 使用中国剩余定理合并结果
from sympy.ntheory.modular import crt
m, _ = crt([p, q], [m_p, m_q])

# 转换为字节
try:
plaintext = long_to_bytes(m)
print("解密后的明文:", plaintext.decode('utf-8', errors='ignore'))
except UnicodeDecodeError:
print("解密后的明文(字节形式):", plaintext)
except Exception as e:
print("解密过程中出现错误:", e)
else:
# 标准RSA解密
try:
# 计算私钥d
d = pow(e, -1, phi_n)
print("私钥d计算成功")

# 执行解密
m = pow(c, d, n)

# 转换为字节
try:
plaintext = long_to_bytes(m)
print("解密后的明文:", plaintext.decode('utf-8', errors='ignore'))
except UnicodeDecodeError:
print("解密后的明文(字节形式):", plaintext)
except ValueError as ve:
print(f"错误: {ve}")
print("这表明e和φ(n)可能不互质,尽管gcd计算显示它们互质")
print("尝试使用替代方法...")

运行得到

最后flag为

1
moectf{N0w_Y0U_hAve_kN0w_h0w_rsA_w0rks!_f!lP0iYlJf!M3ru}

giant_e

题目描述:

1
你这个e,红豆泥呆胶布得丝噶?

附件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from Crypto.Util.number import getPrime

with open("flag.txt","rb") as fs:
flag = fs.read().strip()

p = getPrime(1024)
q = getPrime(1024)
n = p * q
e = 0x609778981bfbb26bb93398cb6d96984616a6ab08ade090c1c0d4fedb00f44f0552a1555efec5cc66e7960b61e94e80e7483b9f906a6c8155a91cdc3e4917fa5347c58a2bc85bb160fcf7fe98e3645cfea8458ea209e565e4eb72ee7cbb232331a862d8a84d91a0ff6d74aa3c779b2b129c3d8148b090c4193234764f2e5d9b2170a9b4859501d07c0601cdd18616a0ab2cf713a7c785fd06f27d68dff24446d884644e08f31bd37ecf48750e4324f959a8d37c5bef25e1580851646d57b3d4f525bc04c7ddafdf146539a84703df2161a0da7a368675f473065d2cb661907d990ba4a8451b15e054bfc4dd73e134f3bf7d8fa4716125d8e21f946d16b7b0fc43
m = int.from_bytes(flag,"big")
c = pow(m,e,n)

print(n) # 0xbaa70ba4c29eb1e6bb3458827540fce84d40e1c966db73c0a39e4f9f40e975c42e02971dab385be27bd2b0687e2476894845cc46e55d9747a5be5ca9d925931ca82b0489e39724ea814800eb3c0ea40d89ebe7fe377f8d3f431a68d209e7a149851c06a4e67db7c99fcfd9ec19496f29d59bb186feb44a36fe344f11d047b9435a1c47fa2f8ed72f59403ebb0e439738fd550a7684247ab7da64311690f461e6dce03bf2fcd55345948a3b537087f07cd680d7461d326690bf21e39dff30268cb33f86eeceff412cd63a38f7110805d337dcad25e6f7e3728b53ca722b695b0d9db37361b5b63213af50dd69ee8b3cf2085f845d7932c08b27bf638e98497239
print(c) # 0x45a9ce4297c8afee693d3cce2525d3399c5251061ddd2462513a57f0fd69bdc74b71b519d3a2c23209d74fcfbcb6b196b5943838c2441cb34496c96e0f9fc9f0f80a2f6d5b49f220cb3e78e36a4a66595aa2dbe3ff6e814d84f07cb5442e2d5d08d08aa9ccde0294b39bfde79a6c6dcd2329e9820744c4deb34a039da7933ddf00b0a0469afb89cba87490a39783a9b2f8f0274f646ca242e78a326dda886c213bc8d03ac1a9150de4ba08c5936c3fe924c8646652ef85aa7ac0103485f472413427a0e9d9a4d416b99e24861ca8499500c693d7a07360158ffffa543480758cafff2a09a9f6628f92767764fa026d48a9dd899838505ae16e38910697f9de14

维纳攻击,直接一把梭

最后flag为

1
moectf{too_larGe_exponent_is_not_a_iDea_too!_Bung92WPIBung92WPIBung9?WP}

minipack

题目描述:

1
super backpack!!!

附件

main.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import random

with open("flag.txt", "rb") as fs:
flag = fs.read().strip()

assert len(flag) == 72
m = int.from_bytes(b"\xff" + flag + b"\xff", "big")


def long2bits(long):
bits = []
while long > 0:
bits.append(long & 1)
long >>= 1
return list(reversed(bits))


def genkey(len):
sum = 0
out = []
for i in range(len):
delta = random.randint(1, 10000)
x = sum + delta
out.append(x)
sum += x
return out


key = genkey(74 * 8)

with open("key.txt", "w") as fs:
fs.write(str(key))


def encrypt(m, keys):
data = long2bits(m)
assert len(data) == len(keys)
return sum((k if (p == 1) else 1) for p, k in zip(data, keys))


with open("ciphertext.txt", "w") as fs:
fs.write(str(encrypt(m, key)))

ciphertext.txt

1
44096612931024003148407895164090667174657344536623354666642108463093659898867859567157728084018394988840266329206836985537987081415020571845239234014695335928717091578810470705259929

key.txt

1
[2693, 3129, 9373, 22156, 43583, 89183, 174151, 347012, 698545, 1395575, 2786872, 5578597, 11154664, 22307983, 44615460, 89235177, 178469017, 356933794, 713870726, 1427747231, 2855491182, 5710979547, 11421958953, 22843921686, 45687844709, 91375686927, 182751371083, 365502739098, 731005483915, 1462010966805, 2924021937796, 5848043870163, 11696087737035, 23392175483728, 46784350967037, 93568701933588, 187137403860696, 374274807720402, 748549615439655, 1497099230888814, 2994198461769632, 5988396923541849, 11976793847087165, 23953587694168619, 47907175388342433, 95814350776684858, 191628701553372159, 383257403106741479, 766514806213475941, 1533029612426953830, 3066059224853913754, 6132118449707825722, 12264236899415648612, 24528473798831299848, 49056947597662597793, 98113895195325191857, 196227790390650390734, 392455580781300780322, 784911161562601561708, 1569822323125203118275, 3139644646250406237314, 6279289292500812473474, 12558578585001624946984, 25117157170003249898713, 50234314340006499792208, 100468628680012999584251, 200937257360025999176988, 401874514720051998349258, 803749029440103996702992, 1607498058880207993405766, 3214996117760415986803588, 6429992235520831973615515, 12859984471041663947228283, 25719968942083327894453929, 51439937884166655788909694, 102879875768333311577817496, 205759751536666623155637628, 411519503073333246311276262, 823039006146666492622547720, 1646078012293332985245100339, 3292156024586665970490196441, 6584312049173331940980390030, 13168624098346663881960779914, 26337248196693327763921564405, 52674496393386655527843129573, 105348992786773311055686261694, 210697985573546622111372516705, 421395971147093244222745038995, 842791942294186488445490075794, 1685583884588372976890980151520, 3371167769176745953781960304028, 6742335538353491907563920611092, 13484671076706983815127841218048, 26969342153413967630255682438466, 53938684306827935260511364872362, 107877368613655870521022729741837, 215754737227311741042045459490735, 431509474454623482084090918981645, 863018948909246964168181837960572, 1726037897818493928336363675917488, 3452075795636987856672727351835314, 6904151591273975713345454703676815, 13808303182547951426690909407355281, 27616606365095902853381818814710732, 55233212730191805706763637629413375, 110466425460383611413527275258828829, 220932850920767222827054550517654934, 441865701841534445654109101035312314, 883731403683068891308218202070622791, 1767462807366137782616436404141247421, 3534925614732275565232872808282498036, 7069851229464551130465745616564994086, 14139702458929102260931491233129993376, 28279404917858204521862982466259977875, 56558809835716409043725964932519963476, 113117619671432818087451929865039927736, 226235239342865636174903859730079848937, 452470478685731272349807719460159701253, 904940957371462544699615438920319404132, 1809881914742925089399230877840638803648, 3619763829485850178798461755681277608906, 7239527658971700357596923511362555216384, 14479055317943400715193847022725110437269, 28958110635886801430387694045450220873388, 57916221271773602860775388090900441743961, 115832442543547205721550776181800883493491, 231664885087094411443101552363601766978092, 463329770174188822886203104727203533959016, 926659540348377645772406209454407067922681, 1853319080696755291544812418908814135842029, 3706638161393510583089624837817628271683504, 7413276322787021166179249675635256543371108, 14826552645574042332358499351270513086737138, 29653105291148084664716998702541026173480549, 59306210582296169329433997405082052346955789, 118612421164592338658867994810164104693913670, 237224842329184677317735989620328209387829648, 474449684658369354635471979240656418775658476, 948899369316738709270943958481312837551313872, 1897798738633477418541887916962625675102629783, 3795597477266954837083775833925251350205258624, 7591194954533909674167551667850502700410512494, 15182389909067819348335103335701005400821027999, 30364779818135638696670206671402010801642054271, 60729559636271277393340413342804021603284112312, 121459119272542554786680826685608043206568225773, 242918238545085109573361653371216086413136448746, 485836477090170219146723306742432172826272896217, 971672954180340438293446613484864345652545794822, 1943345908360680876586893226969728691305091589413, 3886691816721361753173786453939457382610183182718, 7773383633442723506347572907878914765220366364454, 15546767266885447012695145815757829530440732727695, 31093534533770894025390291631515659060881465457658, 62187069067541788050780583263031318121762930907479, 124374138135083576101561166526062636243525861817119, 248748276270167152203122333052125272487051723631106, 497496552540334304406244666104250544974103447264240, 994993105080668608812489332208501089948206894526529, 1989986210161337217624978664417002179896413789059484, 3979972420322674435249957328834004359792827578113448, 7959944840645348870499914657668008719585655156233199, 15919889681290697740999829315336017439171310312463356, 31839779362581395481999658630672034878342620624925288, 63679558725162790963999317261344069756685241249850642, 127359117450325581927998634522688139513370482499705859, 254718234900651163855997269045376279026740964999409899, 509436469801302327711994538090752558053481929998814281, 1018872939602604655423989076181505116106963859997634021, 2037745879205209310847978152363010232213927719995270188, 4075491758410418621695956304726020464427855439990536271, 8150983516820837243391912609452040928855710879981077319, 16301967033641674486783825218904081857711421759962149484, 32603934067283348973567650437808163715422843519924301349, 65207868134566697947135300875616327430845687039848598133, 130415736269133395894270601751232654861691374079697202189, 260831472538266791788541203502465309723382748159394400978, 521662945076533583577082407004930619446765496318788800585, 1043325890153067167154164814009861238893530992637577604691, 2086651780306134334308329628019722477787061985275155204363, 4173303560612268668616659256039444955574123970550310413912, 8346607121224537337233318512078889911148247941100620827531, 16693214242449074674466637024157779822296495882201241654976, 33386428484898149348933274048315559644592991764402483304443, 66772856969796298697866548096631119289185983528804966608947, 133545713939592597395733096193262238578371967057609933226768, 267091427879185194791466192386524477156743934115219866451703, 534182855758370389582932384773048954313487868230439732899048, 1068365711516740779165864769546097908626975736460879465805158, 2136731423033481558331729539092195817253951472921758931605964, 4273462846066963116663459078184391634507902945843517863213090, 8546925692133926233326918156368783269015805891687035726427407, 17093851384267852466653836312737566538031611783374071452855743, 34187702768535704933307672625475133076063223566748142905706417, 68375405537071409866615345250950266152126447133496285811413942, 136750811074142819733230690501900532304252894266992571622830668, 273501622148285639466461381003801064608505788533985143245654171, 547003244296571278932922762007602129217011577067970286491314833, 1094006488593142557865845524015204258434023154135940572982630461, 2188012977186285115731691048030408516868046308271881145965260169, 4376025954372570231463382096060817033736092616543762291930513447, 8752051908745140462926764192121634067472185233087524583861032396, 17504103817490280925853528384243268134944370466175049167722066549, 35008207634980561851707056768486536269888740932350098335444133297, 70016415269961123703414113536973072539777481864700196670888268459, 140032830539922247406828227073946145079554963729400393341776529399, 280065661079844494813656454147892290159109927458800786683553060795, 560131322159688989627312908295784580318219854917601573367106122530, 1120262644319377979254625816591569160636439709835203146734212242212, 2240525288638755958509251633183138321272879419670406293468424484709, 4481050577277511917018503266366276642545758839340812586936848968648, 8962101154555023834037006532732553285091517678681625173873697942182, 17924202309110047668074013065465106570183035357363250347747395878509, 35848404618220095336148026130930213140366070714726500695494791759952, 71696809236440190672296052261860426280732141429453001390989583522712, 143393618472880381344592104523720852561464282858906002781979167044412, 286787236945760762689184209047441705122928565717812005563958334090260, 573574473891521525378368418094883410245857131435624011127916668182358, 1147148947783043050756736836189766820491714262871248022255833336361781, 2294297895566086101513473672379533640983428525742496044511666672726088, 4588595791132172203026947344759067281966857051484992089023333345451208, 9177191582264344406053894689518134563933714102969984178046666690898273, 18354383164528688812107789379036269127867428205939968356093333381796027, 36708766329057377624215578758072538255734856411879936712186666763593164, 73417532658114755248431157516145076511469712823759873424373333527183983, 146835065316229510496862315032290153022939425647519746848746667054375799, 293670130632459020993724630064580306045878851295039493697493334108746318, 587340261264918041987449260129160612091757702590078987394986668217495646, 1174680522529836083974898520258321224183515405180157974789973336434988379, 2349361045059672167949797040516642448367030810360315949579946672869974126, 4698722090119344335899594081033284896734061620720631899159893345739947146, 9397444180238688671799188162066569793468123241441263798319786691479898849, 18794888360477377343598376324133139586936246482882527596639573382959797876, 37589776720954754687196752648266279173872492965765055193279146765919596200, 75179553441909509374393505296532558347744985931530110386558293531839189730, 150359106883819018748787010593065116695489971863060220773116587063678378241, 300718213767638037497574021186130233390979943726120441546233174127356757995, 601436427535276074995148042372260466781959887452240883092466348254713517275, 1202872855070552149990296084744520933563919774904481766184932696509427033546, 2405745710141104299980592169489041867127839549808963532369865393018854064228, 4811491420282208599961184338978083734255679099617927064739730786037708133129, 9622982840564417199922368677956167468511358199235854129479461572075416268017, 19245965681128834399844737355912334937022716398471708258958923144150832536680, 38491931362257668799689474711824669874045432796943416517917846288301665069964, 76983862724515337599378949423649339748090865593886833035835692576603330140364, 153967725449030675198757898847298679496181731187773666071671385153206660282848, 307935450898061350397515797694597358992363462375547332143342770306413320565073, 615870901796122700795031595389194717984726924751094664286685540612826641131213, 1231741803592245401590063190778389435969453849502189328573371081225653282256932, 2463483607184490803180126381556778871938907699004378657146742162451306564516268, 4926967214368981606360252763113557743877815398008757314293484324902613129035495, 9853934428737963212720505526227115487755630796017514628586968649805226258069061, 19707868857475926425441011052454230975511261592035029257173937299610452516139767, 39415737714951852850882022104908461951022523184070058514347874599220905032278195, 78831475429903705701764044209816923902045046368140117028695749198441810064558268, 157662950859807411403528088419633847804090092736280234057391498396883620129116746, 315325901719614822807056176839267695608180185472560468114782996793767240258227363, 630651803439229645614112353678535391216360370945120936229565993587534480516455680, 1261303606878459291228224707357070782432720741890241872459131987175068961032911148, 2522607213756918582456449414714141564865441483780483744918263974350137922065828411, 5045214427513837164912898829428283129730882967560967489836527948700275844131651955, 10090428855027674329825797658856566259461765935121934979673055897400551688263305219, 20180857710055348659651595317713132518923531870243869959346111794801103376526609990, 40361715420110697319303190635426265037847063740487739918692223589602206753053223625, 80723430840221394638606381270852530075694127480975479837384447179204413506106444595, 161446861680442789277212762541705060151388254961950959674768894358408827012212891353, 322893723360885578554425525083410120302776509923901919349537788716817654024425782825, 645787446721771157108851050166820240605553019847803838699075577433635308048851566446, 1291574893443542314217702100333640481211106039695607677398151154867270616097703126505, 2583149786887084628435404200667280962422212079391215354796302309734541232195406251199, 5166299573774169256870808401334561924844424158782430709592604619469082464390812511780, 10332599147548338513741616802669123849688848317564861419185209238938164928781625020231, 20665198295096677027483233605338247699377696635129722838370418477876329857563250035474, 41330396590193354054966467210676495398755393270259445676740836955752659715126500075065, 82660793180386708109932934421352990797510786540518891353481673911505319430253000145600, 165321586360773416219865868842705981595021573081037782706963347823010638860506000292082, 330643172721546832439731737685411963190043146162075565413926695646021277721012000584241, 661286345443093664879463475370823926380086292324151130827853391292042555442024001168874, 1322572690886187329758926950741647852760172584648302261655706782584085110884048002343488, 2645145381772374659517853901483295705520345169296604523311413565168170221768096004683934, 5290290763544749319035707802966591411040690338593209046622827130336340443536192009366966, 10580581527089498638071415605933182822081380677186418093245654260672680887072384018734469, 21161163054178997276142831211866365644162761354372836186491308521345361774144768037473226, 42322326108357994552285662423732731288325522708745672372982617042690723548289536074945369, 84644652216715989104571324847465462576651045417491344745965234085381447096579072149883821, 169289304433431978209142649694930925153302090834982689491930468170762894193158144299768842, 338578608866863956418285299389861850306604181669965378983860936341525788386316288599542292, 677157217733727912836570598779723700613208363339930757967721872683051576772632577199078267, 1354314435467455825673141197559447401226416726679861515935443745366103153545265154398156381, 2708628870934911651346282395118894802452833453359723031870887490732206307090530308796316119, 5417257741869823302692564790237789604905666906719446063741774981464412614181060617592638228, 10834515483739646605385129580475579209811333813438892127483549962928825228362121235185271752, 21669030967479293210770259160951158419622667626877784254967099925857650456724242470370543084, 43338061934958586421540518321902316839245335253755568509934199851715300913448484940741087606, 86676123869917172843081036643804633678490670507511137019868399703430601826896969881482176035, 173352247739834345686162073287609267356981341015022274039736799406861203653793939762964345646, 346704495479668691372324146575218534713962682030044548079473598813722407307587879525928700807, 693408990959337382744648293150437069427925364060089096158947197627444814615175759051857398883, 1386817981918674765489296586300874138855850728120178192317894395254889629230351518103714795488, 2773635963837349530978593172601748277711701456240356384635788790509779258460703036207429589351, 5547271927674699061957186345203496555423402912480712769271577581019558516921406072414859180875, 11094543855349398123914372690406993110846805824961425538543155162039117033842812144829718361089, 22189087710698796247828745380813986221693611649922851077086310324078234067685624289659436726909, 44378175421397592495657490761627972443387223299845702154172620648156468135371248579318873452943, 88756350842795184991314981523255944886774446599691404308345241296312936270742497158637746902810, 177512701685590369982629963046511889773548893199382808616690482592625872541484994317275493804054, 355025403371180739965259926093023779547097786398765617233380965185251745082969988634550987606290, 710050806742361479930519852186047559094195572797531234466761930370503490165939977269101975220435, 1420101613484722959861039704372095118188391145595062468933523860741006980331879954538203950432661, 2840203226969445919722079408744190236376782291190124937867047721482013960663759909076407900865744, 5680406453938891839444158817488380472753564582380249875734095442964027921327519818152815801730515, 11360812907877783678888317634976760945507129164760499751468190885928055842655039636305631603469583, 22721625815755567357776635269953521891014258329520999502936381771856111685310079272611263206935942, 45443251631511134715553270539907043782028516659041999005872763543712223370620158545222526413873319, 90886503263022269431106541079814087564057033318083998011745527087424446741240317090445052827740394, 181773006526044538862213082159628175128114066636167996023491054174848893482480634180890105655483306, 363546013052089077724426164319256350256228133272335992046982108349697786964961268361780211310968368, 727092026104178155448852328638512700512456266544671984093964216699395573929922536723560422621935911, 1454184052208356310897704657277025401024912533089343968187928433398791147859845073447120845243875442, 2908368104416712621795409314554050802049825066178687936375856866797582295719690146894241690487746952, 5816736208833425243590818629108101604099650132357375872751713733595164591439380293788483380975493555, 11633472417666850487181637258216203208199300264714751745503427467190329182878760587576966761950991019, 23266944835333700974363274516432406416398600529429503491006854934380658365757521175153933523901976220, 46533889670667401948726549032864812832797201058859006982013709868761316731515042350307867047803950148, 93067779341334803897453098065729625665594402117718013964027419737522633463030084700615734095607905818, 186135558682669607794906196131459251331188804235436027928054839475045266926060169401231468191215809063, 372271117365339215589812392262918502662377608470872055856109678950090533852120338802462936382431615733, 744542234730678431179624784525837005324755216941744111712219357900181067704240677604925872764863236253, 1489084469461356862359249569051674010649510433883488223424438715800362135408481355209851745529726476026, 2978168938922713724718499138103348021299020867766976446848877431600724270816962710419703491059452946197, 5956337877845427449436998276206696042598041735533952893697754863201448541633925420839406982118905892350, 11912675755690854898873996552413392085196083471067905787395509726402897083267850841678813964237811785497, 23825351511381709797747993104826784170392166942135811574791019452805794166535701683357627928475623569859, 47650703022763419595495986209653568340784333884271623149582038905611588333071403366715255856951247142815, 95301406045526839190991972419307136681568667768543246299164077811223176666142806733430511713902494289017, 190602812091053678381983944838614273363137335537086492598328155622446353332285613466861023427804988575304, 381205624182107356763967889677228546726274671074172985196656311244892706664571226933722046855609977153913, 762411248364214713527935779354457093452549342148345970393312622489785413329142453867444093711219954307246, 1524822496728429427055871558708914186905098684296691940786625244979570826658284907734888187422439908610292, 3049644993456858854111743117417828373810197368593383881573250489959141653316569815469776374844879817221693, 6099289986913717708223486234835656747620394737186767763146500979918283306633139630939552749689759634443103, 12198579973827435416446972469671313495240789474373535526293001959836566613266279261879105499379519268886923, 24397159947654870832893944939342626990481578948747071052586003919673133226532558523758210998759038537772529, 48794319895309741665787889878685253980963157897494142105172007839346266453065117047516421997518077075548624, 97588639790619483331575779757370507961926315794988284210344015678692532906130234095032843995036154151097151, 195177279581238966663151559514741015923852631589976568420688031357385065812260468190065687990072308302186814, 390354559162477933326303119029482031847705263179953136841376062714770131624520936380131375980144616604381572, 780709118324955866652606238058964063695410526359906273682752125429540263249041872760262751960289233208754214, 1561418236649911733305212476117928127390821052719812547365504250859080526498083745520525503920578466417509918, 3122836473299823466610424952235856254781642105439625094731008501718161052996167491041051007841156932835024155, 6245672946599646933220849904471712509563284210879250189462017003436322105992334982082102015682313865670044392, 12491345893199293866441699808943425019126568421758500378924034006872644211984669964164204031364627731340095424, 24982691786398587732883399617886850038253136843517000757848068013745288423969339928328408062729255462680191070, 49965383572797175465766799235773700076506273687034001515696136027490576847938679856656816125458510925360382327, 99930767145594350931533598471547400153012547374068003031392272054981153695877359713313632250917021850720761806, 199861534291188701863067196943094800306025094748136006062784544109962307391754719426627264501834043701441520260, 399723068582377403726134393886189600612050189496272012125569088219924614783509438853254529003668087402883045044, 799446137164754807452268787772379201224100378992544024251138176439849229567018877706509058007336174805766089826, 1598892274329509614904537575544758402448200757985088048502276352879698459134037755413018116014672349611532180180, 3197784548659019229809075151089516804896401515970176097004552705759396918268075510826036232029344699223064362412, 6395569097318038459618150302179033609792803031940352194009105411518793836536151021652072464058689398446128717728, 12791138194636076919236300604358067219585606063880704388018210823037587673072302043304144928117378796892257433818, 25582276389272153838472601208716134439171212127761408776036421646075175346144604086608289856234757593784514875961, 51164552778544307676945202417432268878342424255522817552072843292150350692289208173216579712469515187569029751338, 102329105557088615353890404834864537756684848511045635104145686584300701384578416346433159424939030375138059496648, 204658211114177230707780809669729075513369697022091270208291373168601402769156832692866318849878060750276118991256, 409316422228354461415561619339458151026739394044182540416582746337202805538313665385732637699756121500552237987942, 818632844456708922831123238678916302053478788088365080833165492674405611076627330771465275399512243001104475978454, 1637265688913417845662246477357832604106957576176730161666330985348811222153254661542930550799024486002208951953280, 3274531377826835691324492954715665208213915152353460323332661970697622444306509323085861101598048972004417903909969, 6549062755653671382648985909431330416427830304706920646665323941395244888613018646171722203196097944008835807817952, 13098125511307342765297971818862660832855660609413841293330647882790489777226037292343444406392195888017671615632180, 26196251022614685530595943637725321665711321218827682586661295765580979554452074584686888812784391776035343231269303, 52392502045229371061191887275450643331422642437655365173322591531161959108904149169373777625568783552070686462530818, 104785004090458742122383774550901286662845284875310730346645183062323918217808298338747555251137567104141372925064843, 209570008180917484244767549101802573325690569750621460693290366124647836435616596677495110502275134208282745850133904, 419140016361834968489535098203605146651381139501242921386580732249295672871233193354990221004550268416565491700264856, 838280032723669936979070196407210293302762279002485842773161464498591345742466386709980442009100536833130983400530861, 1676560065447339873958140392814420586605524558004971685546322928997182691484932773419960884018201073666261966801064932, 3353120130894679747916280785628841173211049116009943371092645857994365382969865546839921768036402147332523933602121444, 6706240261789359495832561571257682346422098232019886742185291715988730765939731093679843536072804294665047867204249768, 13412480523578718991665123142515364692844196464039773484370583431977461531879462187359687072145608589330095734408499517, 26824961047157437983330246285030729385688392928079546968741166863954923063758924374719374144291217178660191468816995207, 53649922094314875966660492570061458771376785856159093937482333727909846127517848749438748288582434357320382937633996903, 107299844188629751933320985140122917542753571712318187874964667455819692255035697498877496577164868714640765875267991946, 214599688377259503866641970280245835085507143424636375749929334911639384510071394997754993154329737429281531750535985128, 429199376754519007733283940560491670171014286849272751499858669823278769020142789995509986308659474858563063501071964164, 858398753509038015466567881120983340342028573698545502999717339646557538040285579991019972617318949717126127002143930167, 1716797507018076030933135762241966680684057147397091005999434679293115076080571159982039945234637899434252254004287856853, 3433595014036152061866271524483933361368114294794182011998869358586230152161142319964079890469275798868504508008575720751, 6867190028072304123732543048967866722736228589588364023997738717172460304322284639928159780938551597737009016017151436066, 13734380056144608247465086097935733445472457179176728047995477434344920608644569279856319561877103195474018032034302875060, 27468760112289216494930172195871466890944914358353456095990954868689841217289138559712639123754206390948036064068605744212, 54937520224578432989860344391742933781889828716706912191981909737379682434578277119425278247508412781896072128137211491365, 109875040449156865979720688783485867563779657433413824383963819474759364869156554238850556495016825563792144256274422985379, 219750080898313731959441377566971735127559314866827648767927638949518729738313108477701112990033651127584288512548845971772, 439500161796627463918882755133943470255118629733655297535855277899037459476626216955402225980067302255168577025097691937072, 879000323593254927837765510267886940510237259467310595071710555798074918953252433910804451960134604510337154050195383881617, 1758000647186509855675531020535773881020474518934621190143421111596149837906504867821608903920269209020674308100390767759190, 3516001294373019711351062041071547762040949037869242380286842223192299675813009735643217807840538418041348616200781535520102, 7032002588746039422702124082143095524081898075738484760573684446384599351626019471286435615681076836082697232401563071034910, 14064005177492078845404248164286191048163796151476969521147368892769198703252038942572871231362153672165394464803126142075530, 28128010354984157690808496328572382096327592302953939042294737785538397406504077885145742462724307344330788929606252284154822, 56256020709968315381616992657144764192655184605907878084589475571076794813008155770291484925448614688661577859212504568308156, 112512041419936630763233985314289528385310369211815756169178951142153589626016311540582969850897229377323155718425009136613670, 225024082839873261526467970628579056770620738423631512338357902284307179252032623081165939701794458754646311436850018273224359, 450048165679746523052935941257158113541241476847263024676715804568614358504065246162331879403588917509292622873700036546456004, 900096331359493046105871882514316227082482953694526049353431609137228717008130492324663758807177835018585245747400073092910896, 1800192662718986092211743765028632454164965907389052098706863218274457434016260984649327517614355670037170491494800146185821939, 3600385325437972184423487530057264908329931814778104197413726436548914868032521969298655035228711340074340982989600292371639422, 7200770650875944368846975060114529816659863629556208394827452873097829736065043938597310070457422680148681965979200584743275381, 14401541301751888737693950120229059633319727259112416789654905746195659472130087877194620140914845360297363931958401169486552955, 28803082603503777475387900240458119266639454518224833579309811492391318944260175754389240281829690720594727863916802338973106032, 57606165207007554950775800480916238533278909036449667158619622984782637888520351508778480563659381441189455727833604677946211009, 115212330414015109901551600961832477066557818072899334317239245969565275777040703017556961127318762882378911455667209355892423943, 230424660828030219803103201923664954133115636145798668634478491939130551554081406035113922254637525764757822911334418711784851710, 460849321656060439606206403847329908266231272291597337268956983878261103108162812070227844509275051529515645822668837423569695549, 921698643312120879212412807694659816532462544583194674537913967756522206216325624140455689018550103059031291645337674847139391619, 1843397286624241758424825615389319633064925089166389349075827935513044412432651248280911378037100206118062583290675349694278788947, 3686794573248483516849651230778639266129850178332778698151655871026088824865302496561822756074200412236125166581350699388557576116, 7373589146496967033699302461557278532259700356665557396303311742052177649730604993123645512148400824472250333162701398777115148534, 14747178292993934067398604923114557064519400713331114792606623484104355299461209986247291024296801648944500666325402797554230303950, 29494356585987868134797209846229114129038801426662229585213246968208710598922419972494582048593603297889001332650805595108460601959, 58988713171975736269594419692458228258077602853324459170426493936417421197844839944989164097187206595778002665301611190216921205040, 117977426343951472539188839384916456516155205706648918340852987872834842395689679889978328194374413191556005330603222380433842413587, 235954852687902945078377678769832913032310411413297836681705975745669684791379359779956656388748826383112010661206444760867684820853, 471909705375805890156755357539665826064620822826595673363411951491339369582758719559913312777497652766224021322412889521735369647846, 943819410751611780313510715079331652129241645653191346726823902982678739165517439119826625554995305532448042644825779043470739295803, 1887638821503223560627021430158663304258483291306382693453647805965357478331034878239653251109990611064896085289651558086941478591367, 3775277643006447121254042860317326608516966582612765386907295611930714956662069756479306502219981222129792170579303116173882957181442, 7550555286012894242508085720634653217033933165225530773814591223861429913324139512958613004439962444259584341158606232347765914362560, 15101110572025788485016171441269306434067866330451061547629182447722859826648279025917226008879924888519168682317212464695531828727954, 30202221144051576970032342882538612868135732660902123095258364895445719653296558051834452017759849777038337364634424929391063657457170, 60404442288103153940064685765077225736271465321804246190516729790891439306593116103668904035519699554076674729268849858782127314909479, 120808884576206307880129371530154451472542930643608492381033459581782878613186232207337808071039399108153349458537699717564254629824468, 241617769152412615760258743060308902945085861287216984762066919163565757226372464414675616142078798216306698917075399435128509259648891, 483235538304825231520517486120617805890171722574433969524133838327131514452744928829351232284157596432613397834150798870257018519292350, 966471076609650463041034972241235611780343445148867939048267676654263028905489857658702464568315192865226795668301597740514037038581218, 1932942153219300926082069944482471223560686890297735878096535353308526057810979715317404929136630385730453591336603195481028074077162163, 3865884306438601852164139888964942447121373780595471756193070706617052115621959430634809858273260771460907182673206390962056148154333146, 7731768612877203704328279777929884894242747561190943512386141413234104231243918861269619716546521542921814365346412781924112296308665528, 15463537225754407408656559555859769788485495122381887024772282826468208462487837722539239433093043085843628730692825563848224592617332540, 30927074451508814817313119111719539576970990244763774049544565652936416924975675445078478866186086171687257461385651127696449185234659170, 61854148903017629634626238223439079153941980489527548099089131305872833849951350890156957732372172343374514922771302255392898370469315726, 123708297806035259269252476446878158307883960979055096198178262611745667699902701780313915464744344686749029845542604510785796740938630496, 247416595612070518538504952893756316615767921958110192396356525223491335399805403560627830929488689373498059691085209021571593481877261461, 494833191224141037077009905787512633231535843916220384792713050446982670799610807121255661858977378746996119382170418043143186963754523203, 989666382448282074154019811575025266463071687832440769585426100893965341599221614242511323717954757493992238764340836086286373927509045673, 1979332764896564148308039623150050532926143375664881539170852201787930683198443228485022647435909514987984477528681672172572747855018091832, 3958665529793128296616079246300101065852286751329763078341704403575861366396886456970045294871819029975968955057363344345145495710036185586, 7917331059586256593232158492600202131704573502659526156683408807151722732793772913940090589743638059951937910114726688690290991420072372224, 15834662119172513186464316985200404263409147005319052313366817614303445465587545827880181179487276119903875820229453377380581982840144745529, 31669324238345026372928633970400808526818294010638104626733635228606890931175091655760362358974552239807751640458906754761163965680289491585, 63338648476690052745857267940801617053636588021276209253467270457213781862350183311520724717949104479615503280917813509522327931360578979276, 126677296953380105491714535881603234107273176042552418506934540914427563724700366623041449435898208959231006561835627019044655862721157961390, 253354593906760210983429071763206468214546352085104837013869081828855127449400733246082898871796417918462013123671254038089311725442315928550, 506709187813520421966858143526412936429092704170209674027738163657710254898801466492165797743592835836924026247342508076178623450884631848971, 1013418375627040843933716287052825872858185408340419348055476327315420509797602932984331595487185671673848052494685016152357246901769263697042, 2026836751254081687867432574105651745716370816680838696110952654630841019595205865968663190974371343347696104989370032304714493803538527398761, 4053673502508163375734865148211303491432741633361677392221905309261682039190411731937326381948742686695392209978740064609428987607077054800108, 8107347005016326751469730296422606982865483266723354784443810618523364078380823463874652763897485373390784419957480129218857975214154109593482, 16214694010032653502939460592845213965730966533446709568887621237046728156761646927749305527794970746781568839914960258437715950428308219189801, 32429388020065307005878921185690427931461933066893419137775242474093456313523293855498611055589941493563137679829920516875431900856616438375804, 64858776040130614011757842371380855862923866133786838275550484948186912627046587710997222111179882987126275359659841033750863801713232876754892, 129717552080261228023515684742761711725847732267573676551100969896373825254093175421994444222359765974252550719319682067501727603426465753512768, 259435104160522456047031369485523423451695464535147353102201939792747650508186350843988888444719531948505101438639364135003455206852931507025982, 518870208321044912094062738971046846903390929070294706204403879585495301016372701687977776889439063897010202877278728270006910413705863014045530, 1037740416642089824188125477942093693806781858140589412408807759170990602032745403375955553778878127794020405754557456540013820827411726028098177, 2075480833284179648376250955884187387613563716281178824817615518341981204065490806751911107557756255588040811509114913080027641654823452056190388, 4150961666568359296752501911768374775227127432562357649635231036683962408130981613503822215115512511176081623018229826160055283309646904112385943, 8301923333136718593505003823536749550454254865124715299270462073367924816261963227007644430231025022352163246036459652320110566619293808224771778, 16603846666273437187010007647073499100908509730249430598540924146735849632523926454015288860462050044704326492072919304640221133238587616449538858, 33207693332546874374020015294146998201817019460498861197081848293471699265047852908030577720924100089408652984145838609280442266477175232899078092, 66415386665093748748040030588293996403634038920997722394163696586943398530095705816061155441848200178817305968291677218560884532954350465798155534, 132830773330187497496080061176587992807268077841995444788327393173886797060191411632122310883696400357634611936583354437121769065908700931596309337, 265661546660374994992160122353175985614536155683990889576654786347773594120382823264244621767392800715269223873166708874243538131817401863192618660, 531323093320749989984320244706351971229072311367981779153309572695547188240765646528489243534785601430538447746333417748487076263634803726385238279, 1062646186641499979968640489412703942458144622735963558306619145391094376481531293056978487069571202861076895492666835496974152527269607452770481475, 2125292373282999959937280978825407884916289245471927116613238290782188752963062586113956974139142405722153790985333670993948305054539214905540960129, 4250584746565999919874561957650815769832578490943854233226476581564377505926125172227913948278284811444307581970667341987896610109078429811081922999, 8501169493131999839749123915301631539665156981887708466452953163128755011852250344455827896556569622888615163941334683975793220218156859622163847794, 17002338986263999679498247830603263079330313963775416932905906326257510023704500688911655793113139245777230327882669367951586440436313719244327693836, 34004677972527999358996495661206526158660627927550833865811812652515020047409001377823311586226278491554460655765338735903172880872627438488655382471, 68009355945055998717992991322413052317321255855101667731623625305030040094818002755646623172452556983108921311530677471806345761745254876977310768264, 136018711890111997435985982644826104634642511710203335463247250610060080189636005511293246344905113966217842623061354943612691523490509753954621539469, 272037423780223994871971965289652209269285023420406670926494501220120160379272011022586492689810227932435685246122709887225383046981019507909243077488, 544074847560447989743943930579304418538570046840813341852989002440240320758544022045172985379620455864871370492245419774450766093962039015818486158443, 1088149695120895979487887861158608837077140093681626683705978004880480641517088044090345970759240911729742740984490839548901532187924078031636972316691, 2176299390241791958975775722317217674154280187363253367411956009760961283034176088180691941518481823459485481968981679097803064375848156063273944625793, 4352598780483583917951551444634435348308560374726506734823912019521922566068352176361383883036963646918970963937963358195606128751696312126547889258181, 8705197560967167835903102889268870696617120749453013469647824039043845132136704352722767766073927293837941927875926716391212257503392624253095778517242, 17410395121934335671806205778537741393234241498906026939295648078087690264273408705445535532147854587675883855751853432782424515006785248506191557028092, 34820790243868671343612411557075482786468482997812053878591296156175380528546817410891071064295709175351767711503706865564849030013570497012383114053874, 69641580487737342687224823114150965572936965995624107757182592312350761057093634821782142128591418350703535423007413731129698060027140994024766228109686, 139283160975474685374449646228301931145873931991248215514365184624701522114187269643564284257182836701407070846014827462259396120054281988049532456225789, 278566321950949370748899292456603862291747863982496431028730369249403044228374539287128568514365673402814141692029654924518792240108563976099064912449974, 557132643901898741497798584913207724583495727964992862057460738498806088456749078574257137028731346805628283384059309849037584480217127952198129824894002, 1114265287803797482995597169826415449166991455929985724114921476997612176913498157148514274057462693611256566768118619698075168960434255904396259649789654, 2228530575607594965991194339652830898333982911859971448229842953995224353826996314297028548114925387222513133536237239396150337920868511808792519299584469, 4457061151215189931982388679305661796667965823719942896459685907990448707653992628594057096229850774445026267072474478792300675841737023617585038599166397, 8914122302430379863964777358611323593335931647439885792919371815980897415307985257188114192459701548890052534144948957584601351683474047235170077198331769, 17828244604860759727929554717222647186671863294879771585838743631961794830615970514376228384919403097780105068289897915169202703366948094470340154396667615, 35656489209721519455859109434445294373343726589759543171677487263923589661231941028752456769838806195560210136579795830338405406733896188940680308793334197, 71312978419443038911718218868890588746687453179519086343354974527847179322463882057504913539677612391120420273159591660676810813467792377881360617586661703, 142625956838886077823436437737781177493374906359038172686709949055694358644927764115009827079355224782240840546319183321353621626935584755762721235173329370, 285251913677772155646872875475562354986749812718076345373419898111388717289855528230019654158710449564481681092638366642707243253871169511525442470346657515, 570503827355544311293745750951124709973499625436152690746839796222777434579711056460039308317420899128963362185276733285414486507742339023050884940693312295, 1141007654711088622587491501902249419946999250872305381493679592445554869159422112920078616634841798257926724370553466570828973015484678046101769881386631195, 2282015309422177245174983003804498839893998501744610762987359184891109738318844225840157233269683596515853448741106933141657946030969356092203539762773261773, 4564030618844354490349966007608997679787997003489221525974718369782219476637688451680314466539367193031706897482213866283315892061938712184407079525546521304, 9128061237688708980699932015217995359575994006978443051949436739564438953275376903360628933078734386063413794964427732566631784123877424368814159051093038428, 18256122475377417961399864030435990719151988013956886103898873479128877906550753806721257866157468772126827589928855465133263568247754848737628318102186075775, 36512244950754835922799728060871981438303976027913772207797746958257755813101507613442515732314937544253655179857710930266527136495509697475256636204372157632, 73024489901509671845599456121743962876607952055827544415595493916515511626203015226885031464629875088507310359715421860533054272991019394950513272408744309875, 146048979803019343691198912243487925753215904111655088831190987833031023252406030453770062929259750177014620719430843721066108545982038789901026544817488623124, 292097959606038687382397824486975851506431808223310177662381975666062046504812060907540125858519500354029241438861687442132217091964077579802053089634977249751, 584195919212077374764795648973951703012863616446620355324763951332124093009624121815080251717039000708058482877723374884264434183928155159604106179269954491984, 1168391838424154749529591297947903406025727232893240710649527902664248186019248243630160503434078001416116965755446749768528868367856310319208212358539908990682, 2336783676848309499059182595895806812051454465786481421299055805328496372038496487260321006868156002832233931510893499537057736735712620638416424717079817980733, 4673567353696618998118365191791613624102908931572962842598111610656992744076992974520642013736312005664467863021786999074115473471425241276832849434159635960153, 9347134707393237996236730383583227248205817863145925685196223221313985488153985949041284027472624011328935726043573998148230946942850482553665698868319271914523, 18694269414786475992473460767166454496411635726291851370392446442627970976307971898082568054945248022657871452087147996296461893885700965107331397736638543833203, 37388538829572951984946921534332908992823271452583702740784892885255941952615943796165136109890496045315742904174295992592923787771401930214662795473277087664071, 74777077659145903969893843068665817985646542905167405481569785770511883905231887592330272219780992090631485808348591985185847575542803860429325590946554175334890, 149554155318291807939787686137331635971293085810334810963139571541023767810463775184660544439561984181262971616697183970371695151085607720858651181893108350668586, 299108310636583615879575372274663271942586171620669621926279143082047535620927550369321088879123968362525943233394367940743390302171215441717302363786216701334554, 598216621273167231759150744549326543885172343241339243852558286164095071241855100738642177758247936725051886466788735881486780604342430883434604727572433402666903, 1196433242546334463518301489098653087770344686482678487705116572328190142483710201477284355516495873450103772933577471762973561208684861766869209455144866805338800, 2392866485092668927036602978197306175540689372965356975410233144656380284967420402954568711032991746900207545867154943525947122417369723533738418910289733610671990, 4785732970185337854073205956394612351081378745930713950820466289312760569934840805909137422065983493800415091734309887051894244834739447067476837820579467221343528, 9571465940370675708146411912789224702162757491861427901640932578625521139869681611818274844131966987600830183468619774103788489669478894134953675641158934442691999, 19142931880741351416292823825578449404325514983722855803281865157251042279739363223636549688263933975201660366937239548207576979338957788269907351282317868885378950, 38285863761482702832585647651156898808651029967445711606563730314502084559478726447273099376527867950403320733874479096415153958677915576539814702564635737770756536, 76571727522965405665171295302313797617302059934891423213127460629004169118957452894546198753055735900806641467748958192830307917355831153079629405129271475541516726, 153143455045930811330342590604627595234604119869782846426254921258008338237914905789092397506111471801613282935497916385660615834711662306159258810258542951083029904, 306286910091861622660685181209255190469208239739565692852509842516016676475829811578184795012222943603226565870995832771321231669423324612318517620517085902166068777, 612573820183723245321370362418510380938416479479131385705019685032033352951659623156369590024445887206453131741991665542642463338846649224637035241034171804332136245, 1225147640367446490642740724837020761876832958958262771410039370064066705903319246312739180048891774412906263483983331085284926677693298449274070482068343608664269481, 2450295280734892981285481449674041523753665917916525542820078740128133411806638492625478360097783548825812526967966662170569853355386596898548140964136687217328537122, 4900590561469785962570962899348083047507331835833051085640157480256266823613276985250956720195567097651625053935933324341139706710773193797096281928273374434657077273, 9801181122939571925141925798696166095014663671666102171280314960512533647226553970501913440391134195303250107871866648682279413421546387594192563856546748869314150214, 19602362245879143850283851597392332190029327343332204342560629921025067294453107941003826880782268390606500215743733297364558826843092775188385127713093497738628304741, 39204724491758287700567703194784664380058654686664408685121259842050134588906215882007653761564536781213000431487466594729117653686185550376770255426186995477256608445, 78409448983516575401135406389569328760117309373328817370242519684100269177812431764015307523129073562426000862974933189458235307372371100753540510852373990954513220245, 156818897967033150802270812779138657520234618746657634740485039368200538355624863528030615046258147124852001725949866378916470614744742201507081021704747981909026433590, 313637795934066301604541625558277315040469237493315269480970078736401076711249727056061230092516294249704003451899732757832941229489484403014162043409495963818052871664, 627275591868132603209083251116554630080938474986630538961940157472802153422499454112122460185032588499408006903799465515665882458978968806028324086818991927636105740679, 1254551183736265206418166502233109260161876949973261077923880314945604306844998908224244920370065176998816013807598931031331764917957937612056648173637983855272211484509, 2509102367472530412836333004466218520323753899946522155847760629891208613689997816448489840740130353997632027615197862062663529835915875224113296347275967710544422962711, 5018204734945060825672666008932437040647507799893044311695521259782417227379995632896979681480260707995264055230395724125327059671831750448226592694551935421088845926154, 10036409469890121651345332017864874081295015599786088623391042519564834454759991265793959362960521415990528110460791448250654119343663500896453185389103870842177691854353, 20072818939780243302690664035729748162590031199572177246782085039129668909519982531587918725921042831981056220921582896501308238687327001792906370778207741684355383706399, 40145637879560486605381328071459496325180062399144354493564170078259337819039965063175837451842085663962112441843165793002616477374654003585812741556415483368710767417574, 80291275759120973210762656142918992650360124798288708987128340156518675638079930126351674903684171327924224883686331586005232954749308007171625483112830966737421534837407, 160582551518241946421525312285837985300720249596577417974256680313037351276159860252703349807368342655848449767372663172010465909498616014343250966225661933474843069670361, 321165103036483892843050624571675970601440499193154835948513360626074702552319720505406699614736685311696899534745326344020931818997232028686501932451323866949686139337997, 642330206072967785686101249143351941202880998386309671897026721252149405104639441010813399229473370623393799069490652688041863637994464057373003864902647733899372278679420, 1284660412145935571372202498286703882405761996772619343794053442504298810209278882021626798458946741246787598138981305376083727275988928114746007729805295467798744557356440, 2569320824291871142744404996573407764811523993545238687588106885008597620418557764043253596917893482493575196277962610752167454551977856229492015459610590935597489114719145, 5138641648583742285488809993146815529623047987090477375176213770017195240837115528086507193835786964987150392555925221504334909103955712458984030919221181871194978229437916, 10277283297167484570977619986293631059246095974180954750352427540034390481674231056173014387671573929974300785111850443008669818207911424917968061838442363742389956458876455, 20554566594334969141955239972587262118492191948361909500704855080068780963348462112346028775343147859948601570223700886017339636415822849835936123676884727484779912917746362, 41109133188669938283910479945174524236984383896723819001409710160137561926696924224692057550686295719897203140447401772034679272831645699671872247353769454969559825835495661, 82218266377339876567820959890349048473968767793447638002819420320275123853393848449384115101372591439794406280894803544069358545663291399343744494707538909939119651670991448, 164436532754679753135641919780698096947937535586895276005638840640550247706787696898768230202745182879588812561789607088138717091326582798687488989415077819878239303341985982, 328873065509359506271283839561396193895875071173790552011277681281100495413575393797536460405490365759177625123579214176277434182653165597374977978830155639756478606683974320, 657746131018719012542567679122792387791750142347581104022555362562200990827150787595072920810980731518355250247158428352554868365306331194749955957660311279512957213367948041, 1315492262037438025085135358245584775583500284695162208045110725124401981654301575190145841621961463036710500494316856705109736730612662389499911915320622559025914426735887781, 2630984524074876050170270716491169551167000569390324416090221450248803963308603150380291683243922926073421000988633713410219473461225324778999823830641245118051828853471782658, 5261969048149752100340541432982339102334001138780648832180442900497607926617206300760583366487845852146842001977267426820438946922450649557999647661282490236103657706943564233, 10523938096299504200681082865964678204668002277561297664360885800995215853234412601521166732975691704293684003954534853640877893844901299115999295322564980472207315413887123435, 21047876192599008401362165731929356409336004555122595328721771601990431706468825203042333465951383408587368007909069707281755787689802598231998590645129960944414630827774248641, 42095752385198016802724331463858712818672009110245190657443543203980863412937650406084666931902766817174736015818139414563511575379605196463997181290259921888829261655548502880, 84191504770396033605448662927717425637344018220490381314887086407961726825875300812169333863805533634349472031636278829127023150759210392927994362580519843777658523311097004582, 168383009540792067210897325855434851274688036440980762629774172815923453651750601624338667727611067268698944063272557658254046301518420785855988725161039687555317046622194001952, 336766019081584134421794651710869702549376072881961525259548345631846907303501203248677335455222134537397888126545115316508092603036841571711977450322079375110634093244388004392, 673532038163168268843589303421739405098752145763923050519096691263693814607002406497354670910444269074795776253090230633016185206073683143423954900644158750221268186488776011727, 1347064076326336537687178606843478810197504291527846101038193382527387629214004812994709341820888538149591552506180461266032370412147366286847909801288317500442536372977552028338, 2694128152652673075374357213686957620395008583055692202076386765054775258428009625989418683641777076299183105012360922532064740824294732573695819602576635000885072745955104051960, 5388256305305346150748714427373915240790017166111384404152773530109550516856019251978837367283554152598366210024721845064129481648589465147391639205153270001770145491910208103816, 10776512610610692301497428854747830481580034332222768808305547060219101033712038503957674734567108305196732420049443690128258963297178930294783278410306540003540290983820416211401, 21553025221221384602994857709495660963160068664445537616611094120438202067424077007915349469134216610393464840098887380256517926594357860589566556820613080007080581967640832416256, 43106050442442769205989715418991321926320137328891075233222188240876404134848154015830698938268433220786929680197774760513035853188715721179133113641226160014161163935281664840221, 86212100884885538411979430837982643852640274657782150466444376481752808269696308031661397876536866441573859360395549521026071706377431442358266227282452320028322327870563329673380, 172424201769771076823958861675965287705280549315564300932888752963505616539392616063322795753073732883147718720791099042052143412754862884716532454564904640056644655741126659349727, 344848403539542153647917723351930575410561098631128601865777505927011233078785232126645591506147465766295437441582198084104286825509725769433064909129809280113289311482253318702327, 689696807079084307295835446703861150821122197262257203731555011854022466157570464253291183012294931532590874883164396168208573651019451538866129818259618560226578622964506637402244, 1379393614158168614591670893407722301642244394524514407463110023708044932315140928506582366024589863065181749766328792336417147302038903077732259636519237120453157245929013274799944, 2758787228316337229183341786815444603284488789049028814926220047416089864630281857013164732049179726130363499532657584672834294604077806155464519273038474240906314491858026549599246, 5517574456632674458366683573630889206568977578098057629852440094832179729260563714026329464098359452260726999065315169345668589208155612310929038546076948481812628983716053099203131, 11035148913265348916733367147261778413137955156196115259704880189664359458521127428052658928196718904521453998130630338691337178416311224621858077092153896963625257967432106198407774, 22070297826530697833466734294523556826275910312392230519409760379328718917042254856105317856393437809042907996261260677382674356832622449243716154184307793927250515934864212396817580]

超递增序列

exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#sage
from Crypto.Util.number import *

key = [2693, 3129, 9373, 22156, 43583, 89183, 174151, 347012, 698545, 1395575, 2786872, 5578597, 11154664, 22307983, 44615460, 89235177, 178469017, 356933794, 713870726, 1427747231, 2855491182, 5710979547, 11421958953, 22843921686, 45687844709, 91375686927, 182751371083, 365502739098, 731005483915, 1462010966805, 2924021937796, 5848043870163, 11696087737035, 23392175483728, 46784350967037, 93568701933588, 187137403860696, 374274807720402, 748549615439655, 1497099230888814, 2994198461769632, 5988396923541849, 11976793847087165, 23953587694168619, 47907175388342433, 95814350776684858, 191628701553372159, 383257403106741479, 766514806213475941, 1533029612426953830, 3066059224853913754, 6132118449707825722, 12264236899415648612, 24528473798831299848, 49056947597662597793, 98113895195325191857, 196227790390650390734, 392455580781300780322, 784911161562601561708, 1569822323125203118275, 3139644646250406237314, 6279289292500812473474, 12558578585001624946984, 25117157170003249898713, 50234314340006499792208, 100468628680012999584251, 200937257360025999176988, 401874514720051998349258, 803749029440103996702992, 1607498058880207993405766, 3214996117760415986803588, 6429992235520831973615515, 12859984471041663947228283, 25719968942083327894453929, 51439937884166655788909694, 102879875768333311577817496, 205759751536666623155637628, 411519503073333246311276262, 823039006146666492622547720, 1646078012293332985245100339, 3292156024586665970490196441, 6584312049173331940980390030, 13168624098346663881960779914, 26337248196693327763921564405, 52674496393386655527843129573, 105348992786773311055686261694, 210697985573546622111372516705, 421395971147093244222745038995, 842791942294186488445490075794, 1685583884588372976890980151520, 3371167769176745953781960304028, 6742335538353491907563920611092, 13484671076706983815127841218048, 26969342153413967630255682438466, 53938684306827935260511364872362, 107877368613655870521022729741837, 215754737227311741042045459490735, 431509474454623482084090918981645, 863018948909246964168181837960572, 1726037897818493928336363675917488, 3452075795636987856672727351835314, 6904151591273975713345454703676815, 13808303182547951426690909407355281, 27616606365095902853381818814710732, 55233212730191805706763637629413375, 110466425460383611413527275258828829, 220932850920767222827054550517654934, 441865701841534445654109101035312314, 883731403683068891308218202070622791, 1767462807366137782616436404141247421, 3534925614732275565232872808282498036, 7069851229464551130465745616564994086, 14139702458929102260931491233129993376, 28279404917858204521862982466259977875, 56558809835716409043725964932519963476, 113117619671432818087451929865039927736, 226235239342865636174903859730079848937, 452470478685731272349807719460159701253, 904940957371462544699615438920319404132, 1809881914742925089399230877840638803648, 3619763829485850178798461755681277608906, 7239527658971700357596923511362555216384, 14479055317943400715193847022725110437269, 28958110635886801430387694045450220873388, 57916221271773602860775388090900441743961, 115832442543547205721550776181800883493491, 231664885087094411443101552363601766978092, 463329770174188822886203104727203533959016, 926659540348377645772406209454407067922681, 1853319080696755291544812418908814135842029, 3706638161393510583089624837817628271683504, 7413276322787021166179249675635256543371108, 14826552645574042332358499351270513086737138, 29653105291148084664716998702541026173480549, 59306210582296169329433997405082052346955789, 118612421164592338658867994810164104693913670, 237224842329184677317735989620328209387829648, 474449684658369354635471979240656418775658476, 948899369316738709270943958481312837551313872, 1897798738633477418541887916962625675102629783, 3795597477266954837083775833925251350205258624, 7591194954533909674167551667850502700410512494, 15182389909067819348335103335701005400821027999, 30364779818135638696670206671402010801642054271, 60729559636271277393340413342804021603284112312, 121459119272542554786680826685608043206568225773, 242918238545085109573361653371216086413136448746, 485836477090170219146723306742432172826272896217, 971672954180340438293446613484864345652545794822, 1943345908360680876586893226969728691305091589413, 3886691816721361753173786453939457382610183182718, 7773383633442723506347572907878914765220366364454, 15546767266885447012695145815757829530440732727695, 31093534533770894025390291631515659060881465457658, 62187069067541788050780583263031318121762930907479, 124374138135083576101561166526062636243525861817119, 248748276270167152203122333052125272487051723631106, 497496552540334304406244666104250544974103447264240, 994993105080668608812489332208501089948206894526529, 1989986210161337217624978664417002179896413789059484, 3979972420322674435249957328834004359792827578113448, 7959944840645348870499914657668008719585655156233199, 15919889681290697740999829315336017439171310312463356, 31839779362581395481999658630672034878342620624925288, 63679558725162790963999317261344069756685241249850642, 127359117450325581927998634522688139513370482499705859, 254718234900651163855997269045376279026740964999409899, 509436469801302327711994538090752558053481929998814281, 1018872939602604655423989076181505116106963859997634021, 2037745879205209310847978152363010232213927719995270188, 4075491758410418621695956304726020464427855439990536271, 8150983516820837243391912609452040928855710879981077319, 16301967033641674486783825218904081857711421759962149484, 32603934067283348973567650437808163715422843519924301349, 65207868134566697947135300875616327430845687039848598133, 130415736269133395894270601751232654861691374079697202189, 260831472538266791788541203502465309723382748159394400978, 521662945076533583577082407004930619446765496318788800585, 1043325890153067167154164814009861238893530992637577604691, 2086651780306134334308329628019722477787061985275155204363, 4173303560612268668616659256039444955574123970550310413912, 8346607121224537337233318512078889911148247941100620827531, 16693214242449074674466637024157779822296495882201241654976, 33386428484898149348933274048315559644592991764402483304443, 66772856969796298697866548096631119289185983528804966608947, 133545713939592597395733096193262238578371967057609933226768, 267091427879185194791466192386524477156743934115219866451703, 534182855758370389582932384773048954313487868230439732899048, 1068365711516740779165864769546097908626975736460879465805158, 2136731423033481558331729539092195817253951472921758931605964, 4273462846066963116663459078184391634507902945843517863213090, 8546925692133926233326918156368783269015805891687035726427407, 17093851384267852466653836312737566538031611783374071452855743, 34187702768535704933307672625475133076063223566748142905706417, 68375405537071409866615345250950266152126447133496285811413942, 136750811074142819733230690501900532304252894266992571622830668, 273501622148285639466461381003801064608505788533985143245654171, 547003244296571278932922762007602129217011577067970286491314833, 1094006488593142557865845524015204258434023154135940572982630461, 2188012977186285115731691048030408516868046308271881145965260169, 4376025954372570231463382096060817033736092616543762291930513447, 8752051908745140462926764192121634067472185233087524583861032396, 17504103817490280925853528384243268134944370466175049167722066549, 35008207634980561851707056768486536269888740932350098335444133297, 70016415269961123703414113536973072539777481864700196670888268459, 140032830539922247406828227073946145079554963729400393341776529399, 280065661079844494813656454147892290159109927458800786683553060795, 560131322159688989627312908295784580318219854917601573367106122530, 1120262644319377979254625816591569160636439709835203146734212242212, 2240525288638755958509251633183138321272879419670406293468424484709, 4481050577277511917018503266366276642545758839340812586936848968648, 8962101154555023834037006532732553285091517678681625173873697942182, 17924202309110047668074013065465106570183035357363250347747395878509, 35848404618220095336148026130930213140366070714726500695494791759952, 71696809236440190672296052261860426280732141429453001390989583522712, 143393618472880381344592104523720852561464282858906002781979167044412, 286787236945760762689184209047441705122928565717812005563958334090260, 573574473891521525378368418094883410245857131435624011127916668182358, 1147148947783043050756736836189766820491714262871248022255833336361781, 2294297895566086101513473672379533640983428525742496044511666672726088, 4588595791132172203026947344759067281966857051484992089023333345451208, 9177191582264344406053894689518134563933714102969984178046666690898273, 18354383164528688812107789379036269127867428205939968356093333381796027, 36708766329057377624215578758072538255734856411879936712186666763593164, 73417532658114755248431157516145076511469712823759873424373333527183983, 146835065316229510496862315032290153022939425647519746848746667054375799, 293670130632459020993724630064580306045878851295039493697493334108746318, 587340261264918041987449260129160612091757702590078987394986668217495646, 1174680522529836083974898520258321224183515405180157974789973336434988379, 2349361045059672167949797040516642448367030810360315949579946672869974126, 4698722090119344335899594081033284896734061620720631899159893345739947146, 9397444180238688671799188162066569793468123241441263798319786691479898849, 18794888360477377343598376324133139586936246482882527596639573382959797876, 37589776720954754687196752648266279173872492965765055193279146765919596200, 75179553441909509374393505296532558347744985931530110386558293531839189730, 150359106883819018748787010593065116695489971863060220773116587063678378241, 300718213767638037497574021186130233390979943726120441546233174127356757995, 601436427535276074995148042372260466781959887452240883092466348254713517275, 1202872855070552149990296084744520933563919774904481766184932696509427033546, 2405745710141104299980592169489041867127839549808963532369865393018854064228, 4811491420282208599961184338978083734255679099617927064739730786037708133129, 9622982840564417199922368677956167468511358199235854129479461572075416268017, 19245965681128834399844737355912334937022716398471708258958923144150832536680, 38491931362257668799689474711824669874045432796943416517917846288301665069964, 76983862724515337599378949423649339748090865593886833035835692576603330140364, 153967725449030675198757898847298679496181731187773666071671385153206660282848, 307935450898061350397515797694597358992363462375547332143342770306413320565073, 615870901796122700795031595389194717984726924751094664286685540612826641131213, 1231741803592245401590063190778389435969453849502189328573371081225653282256932, 2463483607184490803180126381556778871938907699004378657146742162451306564516268, 4926967214368981606360252763113557743877815398008757314293484324902613129035495, 9853934428737963212720505526227115487755630796017514628586968649805226258069061, 19707868857475926425441011052454230975511261592035029257173937299610452516139767, 39415737714951852850882022104908461951022523184070058514347874599220905032278195, 78831475429903705701764044209816923902045046368140117028695749198441810064558268, 157662950859807411403528088419633847804090092736280234057391498396883620129116746, 315325901719614822807056176839267695608180185472560468114782996793767240258227363, 630651803439229645614112353678535391216360370945120936229565993587534480516455680, 1261303606878459291228224707357070782432720741890241872459131987175068961032911148, 2522607213756918582456449414714141564865441483780483744918263974350137922065828411, 5045214427513837164912898829428283129730882967560967489836527948700275844131651955, 10090428855027674329825797658856566259461765935121934979673055897400551688263305219, 20180857710055348659651595317713132518923531870243869959346111794801103376526609990, 40361715420110697319303190635426265037847063740487739918692223589602206753053223625, 80723430840221394638606381270852530075694127480975479837384447179204413506106444595, 161446861680442789277212762541705060151388254961950959674768894358408827012212891353, 322893723360885578554425525083410120302776509923901919349537788716817654024425782825, 645787446721771157108851050166820240605553019847803838699075577433635308048851566446, 1291574893443542314217702100333640481211106039695607677398151154867270616097703126505, 2583149786887084628435404200667280962422212079391215354796302309734541232195406251199, 5166299573774169256870808401334561924844424158782430709592604619469082464390812511780, 10332599147548338513741616802669123849688848317564861419185209238938164928781625020231, 20665198295096677027483233605338247699377696635129722838370418477876329857563250035474, 41330396590193354054966467210676495398755393270259445676740836955752659715126500075065, 82660793180386708109932934421352990797510786540518891353481673911505319430253000145600, 165321586360773416219865868842705981595021573081037782706963347823010638860506000292082, 330643172721546832439731737685411963190043146162075565413926695646021277721012000584241, 661286345443093664879463475370823926380086292324151130827853391292042555442024001168874, 1322572690886187329758926950741647852760172584648302261655706782584085110884048002343488, 2645145381772374659517853901483295705520345169296604523311413565168170221768096004683934, 5290290763544749319035707802966591411040690338593209046622827130336340443536192009366966, 10580581527089498638071415605933182822081380677186418093245654260672680887072384018734469, 21161163054178997276142831211866365644162761354372836186491308521345361774144768037473226, 42322326108357994552285662423732731288325522708745672372982617042690723548289536074945369, 84644652216715989104571324847465462576651045417491344745965234085381447096579072149883821, 169289304433431978209142649694930925153302090834982689491930468170762894193158144299768842, 338578608866863956418285299389861850306604181669965378983860936341525788386316288599542292, 677157217733727912836570598779723700613208363339930757967721872683051576772632577199078267, 1354314435467455825673141197559447401226416726679861515935443745366103153545265154398156381, 2708628870934911651346282395118894802452833453359723031870887490732206307090530308796316119, 5417257741869823302692564790237789604905666906719446063741774981464412614181060617592638228, 10834515483739646605385129580475579209811333813438892127483549962928825228362121235185271752, 21669030967479293210770259160951158419622667626877784254967099925857650456724242470370543084, 43338061934958586421540518321902316839245335253755568509934199851715300913448484940741087606, 86676123869917172843081036643804633678490670507511137019868399703430601826896969881482176035, 173352247739834345686162073287609267356981341015022274039736799406861203653793939762964345646, 346704495479668691372324146575218534713962682030044548079473598813722407307587879525928700807, 693408990959337382744648293150437069427925364060089096158947197627444814615175759051857398883, 1386817981918674765489296586300874138855850728120178192317894395254889629230351518103714795488, 2773635963837349530978593172601748277711701456240356384635788790509779258460703036207429589351, 5547271927674699061957186345203496555423402912480712769271577581019558516921406072414859180875, 11094543855349398123914372690406993110846805824961425538543155162039117033842812144829718361089, 22189087710698796247828745380813986221693611649922851077086310324078234067685624289659436726909, 44378175421397592495657490761627972443387223299845702154172620648156468135371248579318873452943, 88756350842795184991314981523255944886774446599691404308345241296312936270742497158637746902810, 177512701685590369982629963046511889773548893199382808616690482592625872541484994317275493804054, 355025403371180739965259926093023779547097786398765617233380965185251745082969988634550987606290, 710050806742361479930519852186047559094195572797531234466761930370503490165939977269101975220435, 1420101613484722959861039704372095118188391145595062468933523860741006980331879954538203950432661, 2840203226969445919722079408744190236376782291190124937867047721482013960663759909076407900865744, 5680406453938891839444158817488380472753564582380249875734095442964027921327519818152815801730515, 11360812907877783678888317634976760945507129164760499751468190885928055842655039636305631603469583, 22721625815755567357776635269953521891014258329520999502936381771856111685310079272611263206935942, 45443251631511134715553270539907043782028516659041999005872763543712223370620158545222526413873319, 90886503263022269431106541079814087564057033318083998011745527087424446741240317090445052827740394, 181773006526044538862213082159628175128114066636167996023491054174848893482480634180890105655483306, 363546013052089077724426164319256350256228133272335992046982108349697786964961268361780211310968368, 727092026104178155448852328638512700512456266544671984093964216699395573929922536723560422621935911, 1454184052208356310897704657277025401024912533089343968187928433398791147859845073447120845243875442, 2908368104416712621795409314554050802049825066178687936375856866797582295719690146894241690487746952, 5816736208833425243590818629108101604099650132357375872751713733595164591439380293788483380975493555, 11633472417666850487181637258216203208199300264714751745503427467190329182878760587576966761950991019, 23266944835333700974363274516432406416398600529429503491006854934380658365757521175153933523901976220, 46533889670667401948726549032864812832797201058859006982013709868761316731515042350307867047803950148, 93067779341334803897453098065729625665594402117718013964027419737522633463030084700615734095607905818, 186135558682669607794906196131459251331188804235436027928054839475045266926060169401231468191215809063, 372271117365339215589812392262918502662377608470872055856109678950090533852120338802462936382431615733, 744542234730678431179624784525837005324755216941744111712219357900181067704240677604925872764863236253, 1489084469461356862359249569051674010649510433883488223424438715800362135408481355209851745529726476026, 2978168938922713724718499138103348021299020867766976446848877431600724270816962710419703491059452946197, 5956337877845427449436998276206696042598041735533952893697754863201448541633925420839406982118905892350, 11912675755690854898873996552413392085196083471067905787395509726402897083267850841678813964237811785497, 23825351511381709797747993104826784170392166942135811574791019452805794166535701683357627928475623569859, 47650703022763419595495986209653568340784333884271623149582038905611588333071403366715255856951247142815, 95301406045526839190991972419307136681568667768543246299164077811223176666142806733430511713902494289017, 190602812091053678381983944838614273363137335537086492598328155622446353332285613466861023427804988575304, 381205624182107356763967889677228546726274671074172985196656311244892706664571226933722046855609977153913, 762411248364214713527935779354457093452549342148345970393312622489785413329142453867444093711219954307246, 1524822496728429427055871558708914186905098684296691940786625244979570826658284907734888187422439908610292, 3049644993456858854111743117417828373810197368593383881573250489959141653316569815469776374844879817221693, 6099289986913717708223486234835656747620394737186767763146500979918283306633139630939552749689759634443103, 12198579973827435416446972469671313495240789474373535526293001959836566613266279261879105499379519268886923, 24397159947654870832893944939342626990481578948747071052586003919673133226532558523758210998759038537772529, 48794319895309741665787889878685253980963157897494142105172007839346266453065117047516421997518077075548624, 97588639790619483331575779757370507961926315794988284210344015678692532906130234095032843995036154151097151, 195177279581238966663151559514741015923852631589976568420688031357385065812260468190065687990072308302186814, 390354559162477933326303119029482031847705263179953136841376062714770131624520936380131375980144616604381572, 780709118324955866652606238058964063695410526359906273682752125429540263249041872760262751960289233208754214, 1561418236649911733305212476117928127390821052719812547365504250859080526498083745520525503920578466417509918, 3122836473299823466610424952235856254781642105439625094731008501718161052996167491041051007841156932835024155, 6245672946599646933220849904471712509563284210879250189462017003436322105992334982082102015682313865670044392, 12491345893199293866441699808943425019126568421758500378924034006872644211984669964164204031364627731340095424, 24982691786398587732883399617886850038253136843517000757848068013745288423969339928328408062729255462680191070, 49965383572797175465766799235773700076506273687034001515696136027490576847938679856656816125458510925360382327, 99930767145594350931533598471547400153012547374068003031392272054981153695877359713313632250917021850720761806, 199861534291188701863067196943094800306025094748136006062784544109962307391754719426627264501834043701441520260, 399723068582377403726134393886189600612050189496272012125569088219924614783509438853254529003668087402883045044, 799446137164754807452268787772379201224100378992544024251138176439849229567018877706509058007336174805766089826, 1598892274329509614904537575544758402448200757985088048502276352879698459134037755413018116014672349611532180180, 3197784548659019229809075151089516804896401515970176097004552705759396918268075510826036232029344699223064362412, 6395569097318038459618150302179033609792803031940352194009105411518793836536151021652072464058689398446128717728, 12791138194636076919236300604358067219585606063880704388018210823037587673072302043304144928117378796892257433818, 25582276389272153838472601208716134439171212127761408776036421646075175346144604086608289856234757593784514875961, 51164552778544307676945202417432268878342424255522817552072843292150350692289208173216579712469515187569029751338, 102329105557088615353890404834864537756684848511045635104145686584300701384578416346433159424939030375138059496648, 204658211114177230707780809669729075513369697022091270208291373168601402769156832692866318849878060750276118991256, 409316422228354461415561619339458151026739394044182540416582746337202805538313665385732637699756121500552237987942, 818632844456708922831123238678916302053478788088365080833165492674405611076627330771465275399512243001104475978454, 1637265688913417845662246477357832604106957576176730161666330985348811222153254661542930550799024486002208951953280, 3274531377826835691324492954715665208213915152353460323332661970697622444306509323085861101598048972004417903909969, 6549062755653671382648985909431330416427830304706920646665323941395244888613018646171722203196097944008835807817952, 13098125511307342765297971818862660832855660609413841293330647882790489777226037292343444406392195888017671615632180, 26196251022614685530595943637725321665711321218827682586661295765580979554452074584686888812784391776035343231269303, 52392502045229371061191887275450643331422642437655365173322591531161959108904149169373777625568783552070686462530818, 104785004090458742122383774550901286662845284875310730346645183062323918217808298338747555251137567104141372925064843, 209570008180917484244767549101802573325690569750621460693290366124647836435616596677495110502275134208282745850133904, 419140016361834968489535098203605146651381139501242921386580732249295672871233193354990221004550268416565491700264856, 838280032723669936979070196407210293302762279002485842773161464498591345742466386709980442009100536833130983400530861, 1676560065447339873958140392814420586605524558004971685546322928997182691484932773419960884018201073666261966801064932, 3353120130894679747916280785628841173211049116009943371092645857994365382969865546839921768036402147332523933602121444, 6706240261789359495832561571257682346422098232019886742185291715988730765939731093679843536072804294665047867204249768, 13412480523578718991665123142515364692844196464039773484370583431977461531879462187359687072145608589330095734408499517, 26824961047157437983330246285030729385688392928079546968741166863954923063758924374719374144291217178660191468816995207, 53649922094314875966660492570061458771376785856159093937482333727909846127517848749438748288582434357320382937633996903, 107299844188629751933320985140122917542753571712318187874964667455819692255035697498877496577164868714640765875267991946, 214599688377259503866641970280245835085507143424636375749929334911639384510071394997754993154329737429281531750535985128, 429199376754519007733283940560491670171014286849272751499858669823278769020142789995509986308659474858563063501071964164, 858398753509038015466567881120983340342028573698545502999717339646557538040285579991019972617318949717126127002143930167, 1716797507018076030933135762241966680684057147397091005999434679293115076080571159982039945234637899434252254004287856853, 3433595014036152061866271524483933361368114294794182011998869358586230152161142319964079890469275798868504508008575720751, 6867190028072304123732543048967866722736228589588364023997738717172460304322284639928159780938551597737009016017151436066, 13734380056144608247465086097935733445472457179176728047995477434344920608644569279856319561877103195474018032034302875060, 27468760112289216494930172195871466890944914358353456095990954868689841217289138559712639123754206390948036064068605744212, 54937520224578432989860344391742933781889828716706912191981909737379682434578277119425278247508412781896072128137211491365, 109875040449156865979720688783485867563779657433413824383963819474759364869156554238850556495016825563792144256274422985379, 219750080898313731959441377566971735127559314866827648767927638949518729738313108477701112990033651127584288512548845971772, 439500161796627463918882755133943470255118629733655297535855277899037459476626216955402225980067302255168577025097691937072, 879000323593254927837765510267886940510237259467310595071710555798074918953252433910804451960134604510337154050195383881617, 1758000647186509855675531020535773881020474518934621190143421111596149837906504867821608903920269209020674308100390767759190, 3516001294373019711351062041071547762040949037869242380286842223192299675813009735643217807840538418041348616200781535520102, 7032002588746039422702124082143095524081898075738484760573684446384599351626019471286435615681076836082697232401563071034910, 14064005177492078845404248164286191048163796151476969521147368892769198703252038942572871231362153672165394464803126142075530, 28128010354984157690808496328572382096327592302953939042294737785538397406504077885145742462724307344330788929606252284154822, 56256020709968315381616992657144764192655184605907878084589475571076794813008155770291484925448614688661577859212504568308156, 112512041419936630763233985314289528385310369211815756169178951142153589626016311540582969850897229377323155718425009136613670, 225024082839873261526467970628579056770620738423631512338357902284307179252032623081165939701794458754646311436850018273224359, 450048165679746523052935941257158113541241476847263024676715804568614358504065246162331879403588917509292622873700036546456004, 900096331359493046105871882514316227082482953694526049353431609137228717008130492324663758807177835018585245747400073092910896, 1800192662718986092211743765028632454164965907389052098706863218274457434016260984649327517614355670037170491494800146185821939, 3600385325437972184423487530057264908329931814778104197413726436548914868032521969298655035228711340074340982989600292371639422, 7200770650875944368846975060114529816659863629556208394827452873097829736065043938597310070457422680148681965979200584743275381, 14401541301751888737693950120229059633319727259112416789654905746195659472130087877194620140914845360297363931958401169486552955, 28803082603503777475387900240458119266639454518224833579309811492391318944260175754389240281829690720594727863916802338973106032, 57606165207007554950775800480916238533278909036449667158619622984782637888520351508778480563659381441189455727833604677946211009, 115212330414015109901551600961832477066557818072899334317239245969565275777040703017556961127318762882378911455667209355892423943, 230424660828030219803103201923664954133115636145798668634478491939130551554081406035113922254637525764757822911334418711784851710, 460849321656060439606206403847329908266231272291597337268956983878261103108162812070227844509275051529515645822668837423569695549, 921698643312120879212412807694659816532462544583194674537913967756522206216325624140455689018550103059031291645337674847139391619, 1843397286624241758424825615389319633064925089166389349075827935513044412432651248280911378037100206118062583290675349694278788947, 3686794573248483516849651230778639266129850178332778698151655871026088824865302496561822756074200412236125166581350699388557576116, 7373589146496967033699302461557278532259700356665557396303311742052177649730604993123645512148400824472250333162701398777115148534, 14747178292993934067398604923114557064519400713331114792606623484104355299461209986247291024296801648944500666325402797554230303950, 29494356585987868134797209846229114129038801426662229585213246968208710598922419972494582048593603297889001332650805595108460601959, 58988713171975736269594419692458228258077602853324459170426493936417421197844839944989164097187206595778002665301611190216921205040, 117977426343951472539188839384916456516155205706648918340852987872834842395689679889978328194374413191556005330603222380433842413587, 235954852687902945078377678769832913032310411413297836681705975745669684791379359779956656388748826383112010661206444760867684820853, 471909705375805890156755357539665826064620822826595673363411951491339369582758719559913312777497652766224021322412889521735369647846, 943819410751611780313510715079331652129241645653191346726823902982678739165517439119826625554995305532448042644825779043470739295803, 1887638821503223560627021430158663304258483291306382693453647805965357478331034878239653251109990611064896085289651558086941478591367, 3775277643006447121254042860317326608516966582612765386907295611930714956662069756479306502219981222129792170579303116173882957181442, 7550555286012894242508085720634653217033933165225530773814591223861429913324139512958613004439962444259584341158606232347765914362560, 15101110572025788485016171441269306434067866330451061547629182447722859826648279025917226008879924888519168682317212464695531828727954, 30202221144051576970032342882538612868135732660902123095258364895445719653296558051834452017759849777038337364634424929391063657457170, 60404442288103153940064685765077225736271465321804246190516729790891439306593116103668904035519699554076674729268849858782127314909479, 120808884576206307880129371530154451472542930643608492381033459581782878613186232207337808071039399108153349458537699717564254629824468, 241617769152412615760258743060308902945085861287216984762066919163565757226372464414675616142078798216306698917075399435128509259648891, 483235538304825231520517486120617805890171722574433969524133838327131514452744928829351232284157596432613397834150798870257018519292350, 966471076609650463041034972241235611780343445148867939048267676654263028905489857658702464568315192865226795668301597740514037038581218, 1932942153219300926082069944482471223560686890297735878096535353308526057810979715317404929136630385730453591336603195481028074077162163, 3865884306438601852164139888964942447121373780595471756193070706617052115621959430634809858273260771460907182673206390962056148154333146, 7731768612877203704328279777929884894242747561190943512386141413234104231243918861269619716546521542921814365346412781924112296308665528, 15463537225754407408656559555859769788485495122381887024772282826468208462487837722539239433093043085843628730692825563848224592617332540, 30927074451508814817313119111719539576970990244763774049544565652936416924975675445078478866186086171687257461385651127696449185234659170, 61854148903017629634626238223439079153941980489527548099089131305872833849951350890156957732372172343374514922771302255392898370469315726, 123708297806035259269252476446878158307883960979055096198178262611745667699902701780313915464744344686749029845542604510785796740938630496, 247416595612070518538504952893756316615767921958110192396356525223491335399805403560627830929488689373498059691085209021571593481877261461, 494833191224141037077009905787512633231535843916220384792713050446982670799610807121255661858977378746996119382170418043143186963754523203, 989666382448282074154019811575025266463071687832440769585426100893965341599221614242511323717954757493992238764340836086286373927509045673, 1979332764896564148308039623150050532926143375664881539170852201787930683198443228485022647435909514987984477528681672172572747855018091832, 3958665529793128296616079246300101065852286751329763078341704403575861366396886456970045294871819029975968955057363344345145495710036185586, 7917331059586256593232158492600202131704573502659526156683408807151722732793772913940090589743638059951937910114726688690290991420072372224, 15834662119172513186464316985200404263409147005319052313366817614303445465587545827880181179487276119903875820229453377380581982840144745529, 31669324238345026372928633970400808526818294010638104626733635228606890931175091655760362358974552239807751640458906754761163965680289491585, 63338648476690052745857267940801617053636588021276209253467270457213781862350183311520724717949104479615503280917813509522327931360578979276, 126677296953380105491714535881603234107273176042552418506934540914427563724700366623041449435898208959231006561835627019044655862721157961390, 253354593906760210983429071763206468214546352085104837013869081828855127449400733246082898871796417918462013123671254038089311725442315928550, 506709187813520421966858143526412936429092704170209674027738163657710254898801466492165797743592835836924026247342508076178623450884631848971, 1013418375627040843933716287052825872858185408340419348055476327315420509797602932984331595487185671673848052494685016152357246901769263697042, 2026836751254081687867432574105651745716370816680838696110952654630841019595205865968663190974371343347696104989370032304714493803538527398761, 4053673502508163375734865148211303491432741633361677392221905309261682039190411731937326381948742686695392209978740064609428987607077054800108, 8107347005016326751469730296422606982865483266723354784443810618523364078380823463874652763897485373390784419957480129218857975214154109593482, 16214694010032653502939460592845213965730966533446709568887621237046728156761646927749305527794970746781568839914960258437715950428308219189801, 32429388020065307005878921185690427931461933066893419137775242474093456313523293855498611055589941493563137679829920516875431900856616438375804, 64858776040130614011757842371380855862923866133786838275550484948186912627046587710997222111179882987126275359659841033750863801713232876754892, 129717552080261228023515684742761711725847732267573676551100969896373825254093175421994444222359765974252550719319682067501727603426465753512768, 259435104160522456047031369485523423451695464535147353102201939792747650508186350843988888444719531948505101438639364135003455206852931507025982, 518870208321044912094062738971046846903390929070294706204403879585495301016372701687977776889439063897010202877278728270006910413705863014045530, 1037740416642089824188125477942093693806781858140589412408807759170990602032745403375955553778878127794020405754557456540013820827411726028098177, 2075480833284179648376250955884187387613563716281178824817615518341981204065490806751911107557756255588040811509114913080027641654823452056190388, 4150961666568359296752501911768374775227127432562357649635231036683962408130981613503822215115512511176081623018229826160055283309646904112385943, 8301923333136718593505003823536749550454254865124715299270462073367924816261963227007644430231025022352163246036459652320110566619293808224771778, 16603846666273437187010007647073499100908509730249430598540924146735849632523926454015288860462050044704326492072919304640221133238587616449538858, 33207693332546874374020015294146998201817019460498861197081848293471699265047852908030577720924100089408652984145838609280442266477175232899078092, 66415386665093748748040030588293996403634038920997722394163696586943398530095705816061155441848200178817305968291677218560884532954350465798155534, 132830773330187497496080061176587992807268077841995444788327393173886797060191411632122310883696400357634611936583354437121769065908700931596309337, 265661546660374994992160122353175985614536155683990889576654786347773594120382823264244621767392800715269223873166708874243538131817401863192618660, 531323093320749989984320244706351971229072311367981779153309572695547188240765646528489243534785601430538447746333417748487076263634803726385238279, 1062646186641499979968640489412703942458144622735963558306619145391094376481531293056978487069571202861076895492666835496974152527269607452770481475, 2125292373282999959937280978825407884916289245471927116613238290782188752963062586113956974139142405722153790985333670993948305054539214905540960129, 4250584746565999919874561957650815769832578490943854233226476581564377505926125172227913948278284811444307581970667341987896610109078429811081922999, 8501169493131999839749123915301631539665156981887708466452953163128755011852250344455827896556569622888615163941334683975793220218156859622163847794, 17002338986263999679498247830603263079330313963775416932905906326257510023704500688911655793113139245777230327882669367951586440436313719244327693836, 34004677972527999358996495661206526158660627927550833865811812652515020047409001377823311586226278491554460655765338735903172880872627438488655382471, 68009355945055998717992991322413052317321255855101667731623625305030040094818002755646623172452556983108921311530677471806345761745254876977310768264, 136018711890111997435985982644826104634642511710203335463247250610060080189636005511293246344905113966217842623061354943612691523490509753954621539469, 272037423780223994871971965289652209269285023420406670926494501220120160379272011022586492689810227932435685246122709887225383046981019507909243077488, 544074847560447989743943930579304418538570046840813341852989002440240320758544022045172985379620455864871370492245419774450766093962039015818486158443, 1088149695120895979487887861158608837077140093681626683705978004880480641517088044090345970759240911729742740984490839548901532187924078031636972316691, 2176299390241791958975775722317217674154280187363253367411956009760961283034176088180691941518481823459485481968981679097803064375848156063273944625793, 4352598780483583917951551444634435348308560374726506734823912019521922566068352176361383883036963646918970963937963358195606128751696312126547889258181, 8705197560967167835903102889268870696617120749453013469647824039043845132136704352722767766073927293837941927875926716391212257503392624253095778517242, 17410395121934335671806205778537741393234241498906026939295648078087690264273408705445535532147854587675883855751853432782424515006785248506191557028092, 34820790243868671343612411557075482786468482997812053878591296156175380528546817410891071064295709175351767711503706865564849030013570497012383114053874, 69641580487737342687224823114150965572936965995624107757182592312350761057093634821782142128591418350703535423007413731129698060027140994024766228109686, 139283160975474685374449646228301931145873931991248215514365184624701522114187269643564284257182836701407070846014827462259396120054281988049532456225789, 278566321950949370748899292456603862291747863982496431028730369249403044228374539287128568514365673402814141692029654924518792240108563976099064912449974, 557132643901898741497798584913207724583495727964992862057460738498806088456749078574257137028731346805628283384059309849037584480217127952198129824894002, 1114265287803797482995597169826415449166991455929985724114921476997612176913498157148514274057462693611256566768118619698075168960434255904396259649789654, 2228530575607594965991194339652830898333982911859971448229842953995224353826996314297028548114925387222513133536237239396150337920868511808792519299584469, 4457061151215189931982388679305661796667965823719942896459685907990448707653992628594057096229850774445026267072474478792300675841737023617585038599166397, 8914122302430379863964777358611323593335931647439885792919371815980897415307985257188114192459701548890052534144948957584601351683474047235170077198331769, 17828244604860759727929554717222647186671863294879771585838743631961794830615970514376228384919403097780105068289897915169202703366948094470340154396667615, 35656489209721519455859109434445294373343726589759543171677487263923589661231941028752456769838806195560210136579795830338405406733896188940680308793334197, 71312978419443038911718218868890588746687453179519086343354974527847179322463882057504913539677612391120420273159591660676810813467792377881360617586661703, 142625956838886077823436437737781177493374906359038172686709949055694358644927764115009827079355224782240840546319183321353621626935584755762721235173329370, 285251913677772155646872875475562354986749812718076345373419898111388717289855528230019654158710449564481681092638366642707243253871169511525442470346657515, 570503827355544311293745750951124709973499625436152690746839796222777434579711056460039308317420899128963362185276733285414486507742339023050884940693312295, 1141007654711088622587491501902249419946999250872305381493679592445554869159422112920078616634841798257926724370553466570828973015484678046101769881386631195, 2282015309422177245174983003804498839893998501744610762987359184891109738318844225840157233269683596515853448741106933141657946030969356092203539762773261773, 4564030618844354490349966007608997679787997003489221525974718369782219476637688451680314466539367193031706897482213866283315892061938712184407079525546521304, 9128061237688708980699932015217995359575994006978443051949436739564438953275376903360628933078734386063413794964427732566631784123877424368814159051093038428, 18256122475377417961399864030435990719151988013956886103898873479128877906550753806721257866157468772126827589928855465133263568247754848737628318102186075775, 36512244950754835922799728060871981438303976027913772207797746958257755813101507613442515732314937544253655179857710930266527136495509697475256636204372157632, 73024489901509671845599456121743962876607952055827544415595493916515511626203015226885031464629875088507310359715421860533054272991019394950513272408744309875, 146048979803019343691198912243487925753215904111655088831190987833031023252406030453770062929259750177014620719430843721066108545982038789901026544817488623124, 292097959606038687382397824486975851506431808223310177662381975666062046504812060907540125858519500354029241438861687442132217091964077579802053089634977249751, 584195919212077374764795648973951703012863616446620355324763951332124093009624121815080251717039000708058482877723374884264434183928155159604106179269954491984, 1168391838424154749529591297947903406025727232893240710649527902664248186019248243630160503434078001416116965755446749768528868367856310319208212358539908990682, 2336783676848309499059182595895806812051454465786481421299055805328496372038496487260321006868156002832233931510893499537057736735712620638416424717079817980733, 4673567353696618998118365191791613624102908931572962842598111610656992744076992974520642013736312005664467863021786999074115473471425241276832849434159635960153, 9347134707393237996236730383583227248205817863145925685196223221313985488153985949041284027472624011328935726043573998148230946942850482553665698868319271914523, 18694269414786475992473460767166454496411635726291851370392446442627970976307971898082568054945248022657871452087147996296461893885700965107331397736638543833203, 37388538829572951984946921534332908992823271452583702740784892885255941952615943796165136109890496045315742904174295992592923787771401930214662795473277087664071, 74777077659145903969893843068665817985646542905167405481569785770511883905231887592330272219780992090631485808348591985185847575542803860429325590946554175334890, 149554155318291807939787686137331635971293085810334810963139571541023767810463775184660544439561984181262971616697183970371695151085607720858651181893108350668586, 299108310636583615879575372274663271942586171620669621926279143082047535620927550369321088879123968362525943233394367940743390302171215441717302363786216701334554, 598216621273167231759150744549326543885172343241339243852558286164095071241855100738642177758247936725051886466788735881486780604342430883434604727572433402666903, 1196433242546334463518301489098653087770344686482678487705116572328190142483710201477284355516495873450103772933577471762973561208684861766869209455144866805338800, 2392866485092668927036602978197306175540689372965356975410233144656380284967420402954568711032991746900207545867154943525947122417369723533738418910289733610671990, 4785732970185337854073205956394612351081378745930713950820466289312760569934840805909137422065983493800415091734309887051894244834739447067476837820579467221343528, 9571465940370675708146411912789224702162757491861427901640932578625521139869681611818274844131966987600830183468619774103788489669478894134953675641158934442691999, 19142931880741351416292823825578449404325514983722855803281865157251042279739363223636549688263933975201660366937239548207576979338957788269907351282317868885378950, 38285863761482702832585647651156898808651029967445711606563730314502084559478726447273099376527867950403320733874479096415153958677915576539814702564635737770756536, 76571727522965405665171295302313797617302059934891423213127460629004169118957452894546198753055735900806641467748958192830307917355831153079629405129271475541516726, 153143455045930811330342590604627595234604119869782846426254921258008338237914905789092397506111471801613282935497916385660615834711662306159258810258542951083029904, 306286910091861622660685181209255190469208239739565692852509842516016676475829811578184795012222943603226565870995832771321231669423324612318517620517085902166068777, 612573820183723245321370362418510380938416479479131385705019685032033352951659623156369590024445887206453131741991665542642463338846649224637035241034171804332136245, 1225147640367446490642740724837020761876832958958262771410039370064066705903319246312739180048891774412906263483983331085284926677693298449274070482068343608664269481, 2450295280734892981285481449674041523753665917916525542820078740128133411806638492625478360097783548825812526967966662170569853355386596898548140964136687217328537122, 4900590561469785962570962899348083047507331835833051085640157480256266823613276985250956720195567097651625053935933324341139706710773193797096281928273374434657077273, 9801181122939571925141925798696166095014663671666102171280314960512533647226553970501913440391134195303250107871866648682279413421546387594192563856546748869314150214, 19602362245879143850283851597392332190029327343332204342560629921025067294453107941003826880782268390606500215743733297364558826843092775188385127713093497738628304741, 39204724491758287700567703194784664380058654686664408685121259842050134588906215882007653761564536781213000431487466594729117653686185550376770255426186995477256608445, 78409448983516575401135406389569328760117309373328817370242519684100269177812431764015307523129073562426000862974933189458235307372371100753540510852373990954513220245, 156818897967033150802270812779138657520234618746657634740485039368200538355624863528030615046258147124852001725949866378916470614744742201507081021704747981909026433590, 313637795934066301604541625558277315040469237493315269480970078736401076711249727056061230092516294249704003451899732757832941229489484403014162043409495963818052871664, 627275591868132603209083251116554630080938474986630538961940157472802153422499454112122460185032588499408006903799465515665882458978968806028324086818991927636105740679, 1254551183736265206418166502233109260161876949973261077923880314945604306844998908224244920370065176998816013807598931031331764917957937612056648173637983855272211484509, 2509102367472530412836333004466218520323753899946522155847760629891208613689997816448489840740130353997632027615197862062663529835915875224113296347275967710544422962711, 5018204734945060825672666008932437040647507799893044311695521259782417227379995632896979681480260707995264055230395724125327059671831750448226592694551935421088845926154, 10036409469890121651345332017864874081295015599786088623391042519564834454759991265793959362960521415990528110460791448250654119343663500896453185389103870842177691854353, 20072818939780243302690664035729748162590031199572177246782085039129668909519982531587918725921042831981056220921582896501308238687327001792906370778207741684355383706399, 40145637879560486605381328071459496325180062399144354493564170078259337819039965063175837451842085663962112441843165793002616477374654003585812741556415483368710767417574, 80291275759120973210762656142918992650360124798288708987128340156518675638079930126351674903684171327924224883686331586005232954749308007171625483112830966737421534837407, 160582551518241946421525312285837985300720249596577417974256680313037351276159860252703349807368342655848449767372663172010465909498616014343250966225661933474843069670361, 321165103036483892843050624571675970601440499193154835948513360626074702552319720505406699614736685311696899534745326344020931818997232028686501932451323866949686139337997, 642330206072967785686101249143351941202880998386309671897026721252149405104639441010813399229473370623393799069490652688041863637994464057373003864902647733899372278679420, 1284660412145935571372202498286703882405761996772619343794053442504298810209278882021626798458946741246787598138981305376083727275988928114746007729805295467798744557356440, 2569320824291871142744404996573407764811523993545238687588106885008597620418557764043253596917893482493575196277962610752167454551977856229492015459610590935597489114719145, 5138641648583742285488809993146815529623047987090477375176213770017195240837115528086507193835786964987150392555925221504334909103955712458984030919221181871194978229437916, 10277283297167484570977619986293631059246095974180954750352427540034390481674231056173014387671573929974300785111850443008669818207911424917968061838442363742389956458876455, 20554566594334969141955239972587262118492191948361909500704855080068780963348462112346028775343147859948601570223700886017339636415822849835936123676884727484779912917746362, 41109133188669938283910479945174524236984383896723819001409710160137561926696924224692057550686295719897203140447401772034679272831645699671872247353769454969559825835495661, 82218266377339876567820959890349048473968767793447638002819420320275123853393848449384115101372591439794406280894803544069358545663291399343744494707538909939119651670991448, 164436532754679753135641919780698096947937535586895276005638840640550247706787696898768230202745182879588812561789607088138717091326582798687488989415077819878239303341985982, 328873065509359506271283839561396193895875071173790552011277681281100495413575393797536460405490365759177625123579214176277434182653165597374977978830155639756478606683974320, 657746131018719012542567679122792387791750142347581104022555362562200990827150787595072920810980731518355250247158428352554868365306331194749955957660311279512957213367948041, 1315492262037438025085135358245584775583500284695162208045110725124401981654301575190145841621961463036710500494316856705109736730612662389499911915320622559025914426735887781, 2630984524074876050170270716491169551167000569390324416090221450248803963308603150380291683243922926073421000988633713410219473461225324778999823830641245118051828853471782658, 5261969048149752100340541432982339102334001138780648832180442900497607926617206300760583366487845852146842001977267426820438946922450649557999647661282490236103657706943564233, 10523938096299504200681082865964678204668002277561297664360885800995215853234412601521166732975691704293684003954534853640877893844901299115999295322564980472207315413887123435, 21047876192599008401362165731929356409336004555122595328721771601990431706468825203042333465951383408587368007909069707281755787689802598231998590645129960944414630827774248641, 42095752385198016802724331463858712818672009110245190657443543203980863412937650406084666931902766817174736015818139414563511575379605196463997181290259921888829261655548502880, 84191504770396033605448662927717425637344018220490381314887086407961726825875300812169333863805533634349472031636278829127023150759210392927994362580519843777658523311097004582, 168383009540792067210897325855434851274688036440980762629774172815923453651750601624338667727611067268698944063272557658254046301518420785855988725161039687555317046622194001952, 336766019081584134421794651710869702549376072881961525259548345631846907303501203248677335455222134537397888126545115316508092603036841571711977450322079375110634093244388004392, 673532038163168268843589303421739405098752145763923050519096691263693814607002406497354670910444269074795776253090230633016185206073683143423954900644158750221268186488776011727, 1347064076326336537687178606843478810197504291527846101038193382527387629214004812994709341820888538149591552506180461266032370412147366286847909801288317500442536372977552028338, 2694128152652673075374357213686957620395008583055692202076386765054775258428009625989418683641777076299183105012360922532064740824294732573695819602576635000885072745955104051960, 5388256305305346150748714427373915240790017166111384404152773530109550516856019251978837367283554152598366210024721845064129481648589465147391639205153270001770145491910208103816, 10776512610610692301497428854747830481580034332222768808305547060219101033712038503957674734567108305196732420049443690128258963297178930294783278410306540003540290983820416211401, 21553025221221384602994857709495660963160068664445537616611094120438202067424077007915349469134216610393464840098887380256517926594357860589566556820613080007080581967640832416256, 43106050442442769205989715418991321926320137328891075233222188240876404134848154015830698938268433220786929680197774760513035853188715721179133113641226160014161163935281664840221, 86212100884885538411979430837982643852640274657782150466444376481752808269696308031661397876536866441573859360395549521026071706377431442358266227282452320028322327870563329673380, 172424201769771076823958861675965287705280549315564300932888752963505616539392616063322795753073732883147718720791099042052143412754862884716532454564904640056644655741126659349727, 344848403539542153647917723351930575410561098631128601865777505927011233078785232126645591506147465766295437441582198084104286825509725769433064909129809280113289311482253318702327, 689696807079084307295835446703861150821122197262257203731555011854022466157570464253291183012294931532590874883164396168208573651019451538866129818259618560226578622964506637402244, 1379393614158168614591670893407722301642244394524514407463110023708044932315140928506582366024589863065181749766328792336417147302038903077732259636519237120453157245929013274799944, 2758787228316337229183341786815444603284488789049028814926220047416089864630281857013164732049179726130363499532657584672834294604077806155464519273038474240906314491858026549599246, 5517574456632674458366683573630889206568977578098057629852440094832179729260563714026329464098359452260726999065315169345668589208155612310929038546076948481812628983716053099203131, 11035148913265348916733367147261778413137955156196115259704880189664359458521127428052658928196718904521453998130630338691337178416311224621858077092153896963625257967432106198407774, 22070297826530697833466734294523556826275910312392230519409760379328718917042254856105317856393437809042907996261260677382674356832622449243716154184307793927250515934864212396817580]
c = 44096612931024003148407895164090667174657344536623354666642108463093659898867859567157728084018394988840266329206836985537987081415020571845239234014695335928717091578810470705259929


m = ''
for i in reversed(key):
if c > i:
m += '1'
c -= i
else:
m += '0'
c -= 1

msg = ''
for i in reversed(m):
msg += i

flag = long_to_bytes(int(msg,2))
print(flag)

运行得到

最后flag为

1
moectf{superiNcreasiNg_sequeNce_is_useful_tO_cONstruct_a_KNapsacK_MAxSM}

xorrrrrrrrr

题目描述:

1
芝士什么运算?

task.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
flag = open('flag.txt','rb').read()
assert flag.startswith(b'moectf{') and flag.endswith(b'}')
article = open('article.txt','rb').read()

import random

strxor = lambda x,y: bytes([a^b for a,b in zip(x,y)])

result = []

for i in range(100):
range_start = random.randint(0, len(article) - len(flag))
mask = article[range_start:range_start + len(flag)]
result.append(strxor(flag,mask))

with open("result.log","w") as fs:
fs.writelines([str(i)+"\n" for i in result])

result.log

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
b'\x00\n\x17\x10T\x11\x138\x10 >\x17Du+\'A1\x00+M\x03\x16\x00\x11\x17\x17D>\x00h\x117\x1dY\x00\x7fS"\x04\x07\x06TR\x0b\x01*^\r<\x1e9\x12@#W\x1b\x1b\x1f\x19/V!FU"\n\x0b\x0cm\x0f\x12'
b'\x1f\x0e\x06\x17\x1d\x05\x1a;\x10$4\x10\\9,h\x12#\x067M\x00\x00T\r\x1d\x12D+\x1bh\x04)\x17Y\x16\x7fC$\x17\x00\x1c\x13URO*]\x0c+\x05)\x07MmV\x00\x07\x17K4\x195\x07T9\n\x1cI/\x15]'
b'\x0b\x03\n\x14T\x10\x0e;^2-\x18R<3!\x15?\x00,M\x15\x1b\x15\x11R\x15\x08>\x13=\x00\x7f\x16U\x06(_"\x0eA\x13\x1aTRh1D\x0c+\x02/\x12\x01>\\\x14\x01\x0fX5\\xFx%\x1aX\x1e$\x00\x11'
b'\x0e\x06\x11\n\x1a\x01[=_"-\x17U,qh(0E&\x02\x14S\x10\x00\x16\x0c\x07>\x00-E&\x17E\x00,U<\x03A\x06\x1b\x10\x1eD>B\x070\x02-FU%VR\x16\x17W$\\&\x12Rj\x06\x16I9\x04\x14'
b'\x0c\x1d\x00C\x17\t\x16\'_9:\x17D&\x7f<\t7\x11\x7f\x1d\x04\x01\x12\n\x00\x08D,\x1d%\x0c3\x19BR9E>\x06\x15\x1b\x1b^\x01\x0f\x7fd\x010\x1fj\x04N"XR\x1c\x0b\x190K?\x12U/\x01X\x0f"\x1e]'
b'\x1f\x1cKC-\t\x0ewG>3\x15\x109:)\x138E7\x02\x16S\x00\nR\n\x14+\x1d%\x0c%\x1d\x10\x0b0E"E"R\x17_\x16D\x7fR\x10y\x199\x0fO*\x13\x11\x19\x1dO"Kv\x12S#\x0c\x13\x1am\x18\x15'
b"\x0c\x1dE\x0b\x15\x14\x1f Q%:YQ;;h\x129\x03+\x1a\x00\x01\x11E\x11\n\t/\x1b&\x001\x0cCR+X1\x11A\x02\x11B\x14N-]I*\x05'\x0fM,AR\x13\rW$M?\tO9AX=%\x05\x0e"
b'\x05\x0e\x11C\x04\n\x1a0E2\x7f\x17U!(\'\x13=E>\x03\x05S=\x0b\x06\x00\x161\x11<E,\x17V\x06(Q"\x00OR-_\x07\x01(Y\x055L&\x03@?]R\x1d\x17NgM9FS/\x0c\x17\x0e#\x05\x07'
b'\x03\x0bE\x10\x1b\x00\x0f Q%:YS:28\x0e8\x001\x19\x12S\x00\r\x13\x11D/\x11:\x030\n]R,Y=\x0c\r\x13\x06\x10\x14T1S\x1d0\x03$\x15\x0fmg\x1a\x1c\x0b\x19%V9\r\x01#\x1cX\x1e?\x05\t'
b'M\x0c\n\x11\x06\x03\x18#^2,\n\x1041,A&\x00-\x0b\x0e\x01\x19\x04\x1c\x06\x01\x7f\x1b.E+\x10U\x1b-\x10 \x17\x0e\x15\x06Q\x1fRq\x1006\x19j\x07S(\x13\x02\x1a\x11J"]v\x00N8O\x19\x07m\t\x05'
b'\x01\x03\n\x00\x15\x12\x128^w/\x18S>>/\x04zE>\x03\x05S\x11\x13\x17\x0bD&\x1b=\x17\x7f\x17G\x1c\x7fg5\x07A\x01\x11B\x04D-\x1eI\x00\x03?FV$_\x1eU\x14\\&K8FU"\nX\x19?\x03\x10'
b"\x0e\n\x16\x10\x1b\x14\x08wQ9;Y]02'\x13/E,\x14\x12\x07\x11\x08\x01KD\x06\x1b=E(\x11\\\x1e\x7f\\5\x04\x13\x1cTX\x1dV\x7fD\x01<L)\tL=Z\x1e\x10\n\x19.T&\nD'\n\x16\x1d>L\r"
b'\x1e\x1cE\x02\x1a\x02[\'U%9\x16B8>&\x023E0\x0bA\x07\x1c\x00\x1b\x17D/\x06\'\x02-\x19]\x01q\x10\t\n\x14R\x15B\x17\x01/_\x00*\t.FG"AR\x14\x16\x19"A5\x0fU#\x01\x1fI\'\x03\x08'
b'\x0c\x01\x01C\x11\x10\x1e9\x10.0\x0cBu0?\x0fv2:\x0fA\x00\x11\x17\x04\x00\x16qT\x11\n*XG\x1b3\\p\t\x04\x13\x06^RU7UI)\x1e%\x0bH>V\x01U\x19W#\x19&\x0fU,\x0e\x14\x05>L\x12'
b'\x08\x1dE\x13\x06\t\x1c%Q:2\x1cBy\xbd\xc8\xfcv\x001\x01\x08\x14\x1c\x11\x17\x0b\x01;T*\x1c\x7f\x19^R*^4\x00\x13\x01\x00Q\x1cE6^\x0ey\x03,FU%VR\x00\x16]"K:\x1fH$\x08X\n"\x01\r'
b'M\x0e\x0b\x07T\x16\x1e%V8-\x14Q;<-A9\x03\x7f\x19\t\x16\x1d\x17R\x15\x160\x13:\x042\x0b\x1eR\x06_%E\x00\x00\x11\x10\x02N6C\x0c=L,\tSmR\x1cU\x1dA$P"\x0fO-O\x12\x068\x1e\x13'
b'\nO\x0f\x0c\x01\x14\x152Iy\x7f0Vu&\'\x14v\x01:\t\x08\x10\x15\x11\x17E\x1d0\x01:\x16:\x14VR+_p\t\x04\x13\x06^\x1bO8\x10\x1d1\tj\x05N#P\x17\x05\x0cJgP8FU"\x06\x0bI/\x03\x12'
b'\x1f\x1d\x00\x00\x00\x08\x1e$Cw>\x17Tu/-\x130\n-\x00\x00\x1d\x17\x00R\n\x02\x7f\x00 \x006\n\x10\x02-_7\x17\x00\x1f\x07\x1eRx0EI8\x1e/FQ"Z\x01\x10\x1c\x19!V$F@$O\x1d\x11.\x05\t'
b'\x02O\x02\x06\x00F\x192D#:\x0b\x104+h\x15>\x006\x1fA\x10\x06\x04\x14\x11D=\rh\x101\x1cU\x00,D1\x0b\x05\x1b\x1aWRI0GI-\x04/\x15DmP\x1d\x18\x08V)\\8\x12Rj\x18\x17\x1b&L\x1c'
b'\x1a\x06\t\x0fT\n\x1e6B9\x7f\x11_"\x7f<\t3E<\x02\x0c\x03\x1d\t\x17\x17D6\x198\t:\x15U\x1c+Cp\x15\x13\x1d\x17U\x16T-UI:\r&\nRmR\x1c\x11XQ(Nv\x12Nj\x1a\x0b\x0cm\x18\x15'
b"\x1f\x1d\n\x11\x07F\x186E$:\x1d\x107&h\x15>\x00\x7f\x1a\x00\nT\x11\x1a\x04\x10\x7f\x17'\x08/\rD\x17-Cp\x17\x04\x02\x06U\x01D1DI7\x19'\x04D?@\\U!V2\x19!\x0fM&O\x14\x0c,\x1e\x13"
b'M\x07\n\x14T\x12\x14wQ!0\x10Tu,<\x137\x0b8\x08A\x1d\x01\x08\x17\x17\r<\x15$E:\nB\x1d-Cp\x06\x00\x07\x07U\x16\x01=II-\x04/FV,JR\x01\x10X3\x195\tL:\x1a\x0c\x0c?\x1f]'
b'\x01\n\x04\x11\x1aF\x0b%Q4+\x10S43h\x12=\x0c3\x01\x12S\x07\x10\x11\rD>\x07h\r0\x0f\x10\x060\x101\x13\x0e\x1b\x10\x10\x01U-Q\x07>\tj\x08T V\x00\x1c\x1bX+\x193\x14S%\x1d\x0bI.\r\x08'
b'\x08CE\x02\x1a\x02[2F21YI:*:A9\x121M6\x16\x16E\x01\x00\x16)\x11:K\x7f!_\x07\x7fG9\t\rR\x18U\x13S1\x10\x1d1\tj\x16S"^\x1b\x06\x1dJgX8\x02\x01:\x06\x0c\x0f,\x00\x11'
b'\nO\n\x05T\x12\x132\x10"1\x1dU\'31\x088\x02\x7f\x0e\x0e\x1e\x04\x10\x06\x00\x16\x7f\x071\x16+\x1d]R>^4E\x08\x06\x07\x10\x1bL/Q\n-L%\x08\x014\\\x07\x07XX7I:\x0fB+\x1b\x11\x06#L\r'
b'\x02\x1a\x17C\x1b\x11\x15wg2=YC0->\x04$K\x7f4\x0e\x06T\x12\x1b\t\x08\x7f\x18-\x04-\x16\x10\x067Up\x15\x13\x1d\x19Y\x01D,\x10\x087\x08j\x16H9U\x13\x19\x14JgV0FB%\x01\x1b\x1c?\x1e\x18'
b'M\x0e\x13\x06\x06\x07\x1c2\x10\'-\x16W\'>%\x0c3\x17qM8\x1c\x01E\x05\x0c\x083T$\x00>\n^R7_\'E\x15\x1dTG\x00H+UI \x03?\x14\x01"D\x1cU-W.Av\x15I/\x03\x14Em\x15\x12'
b'\x04\x1cE\x08\x1a\t\x0c;U38\x1c\x10!0h\x00 \n6\tA\x07\x1c\x00R\x16\x01<\x01:\x0c+\x01\x10\x1a0\\5\x16A\x14\x06_\x1f\x01=E\x0f?\t8FN;V\x00\x13\x14V0\x19 \x13M$\n\n\x08/\x05\x11'
b'\x00\x1cKC\'\x16\x1e4Y16\x1a\x10<28\r3\x08:\x03\x15\x12\x00\x0c\x1d\x0b\x17\x7f\x1b.E,\x01C\x06:]#E\x02\x1a\x15^\x15D\x7f_\x1f<\x1ej\x12H V^U\x1aL3\x19"\x0eDj\x1a\x16\r(\x1e\x11'
b'\x0c\x01\x01C=\x08\x0f2B9:\r\x10&0.\x15!\x04-\x08OS-\n\x07E\x136\x18$E3\x1dQ\x001\x108\n\x16R\x00_RS:S\x06>\x02#\x1cDmR\x1c\x11XX1V?\x02\x01>\x07\x1dI#\r\x0e'
b'M\x16\n\x16\x06\x15\x1e;Vw+\x16\x109:)\x138\x0c1\nA\x07\x1c\x00R\x06\x0b1\x17-\x15+\x0b\x10\x1b1\x10$\r\x08\x01TR\x1dN4\x1cI-\x04/\x08\x014\\\x07U\x0fP+Uv\x04Dj\x00\x16I4\x03\x08'
b'\x1d\x1b\x16C\x10\t[9_#qYq93h\x029\x08/\x18\x15\x16\x06E\x01\x1c\x17+\x11%\x16\x7f\x10Q\x04:\x10#\x0c\x0c\x1b\x18Q\x00\x017Q\x1b=\x1b+\x14DmR\x1c\x11XJ(_"\x11@8\nX\n"\x01\r'
b'M&\x0b\x17\x11\x14\x152Dw,\x16V!()\x133K\x7f4\x0e\x06T\x12\x1b\t\x08\x7f\x18-\x04-\x16\x10\x1a0Gp\x11\x0eR\x06U\x11N8^\x00#\tj\x07O)\x13\x13\x03\x17P#\x19"\x0eDj\x01\x19\x1a9\x15]'
b"\x0c\x02\x16MT5\x0b2S>9\x10Su6%\x11:\x002\x08\x0f\x07\x15\x11\x1b\n\n,T'\x03\x7f\x0bI\x01+U=\x16A\x11\x1cQ\x1cF:\x10\x06/\t8FU$^\x17YX[2Mv\x12I/O\r\x07)\t\x0f"
b'\x03\x0b\x00\x11\x07\x12\x1a9T>1\x1e\x10=0?A"\r:\x1e\x04S\x17\n\x1f\x15\x0b1\x11&\x11,XG\x1d-[p\x04\x0f\x16TX\x1dV\x7fD\x01<\x15j\x07G+V\x11\x01XM/\\v\x05N8\x1d\x1d\n9\x02\x18'
b'\x04\x0c\x04\x0fT\x03\t%_%,YS4*;\x042E=\x14A\x07\x1c\x00R\x12\x05&T<\r>\x0c\x10\x110] \x10\x15\x17\x06CRS:@\x1b<\x1f/\x08Um]\x07\x18\x1a\\5JxFx%\x1aX\x1e$\x00\x11'
b'\x01\x03E\x0f\x11\x07\t9\x10#7\x1c\x10%-\'\x0c?\x16:\x1eA\x12\x1a\x01R\x15\r+\x12)\t3\x0b\x10\x1d9\x103\n\x0f\x11\x01B\x00D1S\x10uL+FU"C\x1b\x16XV!\x19?\x08B8\n\x19\x1a$\x02\x1a'
b'\x1f\x19\x00\x11ZF"8Ew(\x10\\9\x7f$\x047\x171M\x15\x1b\x11E\x02\x17\x0b2\x1d;\x00,XQ\x1c;\x10 \x0c\x15\x14\x15\\\x1eR\x7f_\x0fy\x0f%\x08B8A\x00\x10\x16Z>\x15v\x07\x01>\x00\x08\x00.L\x12'
b'M\x0b\x10\x11\x1d\x08\x1cw\\>1\x12Y;8h\x15>\x04+M\x02\x1c\x1a\x03\x1d\x10\n;T<\r:XQ\x04:B1\x02\x04R\x04B\x1dF-Q\x044\t8H\x01\x14\\\x07U\x0fP+Uv\nD+\x1d\x16I%\x03\n'
b'\x0c\x1d\x0bC\x1c\t\x0cwD8\x7f\x16@!6%\x08,\x00\x7f\x14\x0e\x06\x06E1E\x070\x10-E=\x01\x10\x07,Y>\x02A\x11\x18U\x04D-\x10\x1d+\x05)\rRmG\x1a\x14\x0c\x19"A&\nN#\x1bX\x1d%\t]'
b'\x0b\x0e\t\x0f\x07F\x141\x1040\x17S -:\x048\x06&AA\x12T\x11\x1d\x15\r<T\'\x03\x7f\x11^\x11-U1\x16\x08\x1c\x13\x10\x1bL/_\x1b-\r$\x05DmR\x01U\x15L+M?\x16M/O\x08\x1b"\x0f\x18'
b'\x03\x0c\x00\x13\x00\x15[3_w1\x16D{\x7f\t\r:E<\x02\x0c\x03\x01\x11\x17\x17D,\r;\x11:\x15CR7Q&\x00A\x01\x1d]\x1bM>BI1\r8\x02V,A\x17U\x19W#\x19%\tG>\x18\x19\x1b(L\x1e'
b"\x08\x0e\x17\r\x1d\x08\x1cwD?:YS:1+\x04&\x11,M\x08\x1dT\x11\x1a\x0c\x17\x7f\x16'\n4T\x10\x067U>E\x18\x1d\x01\x10\x05H3\\I;\tj\tOmJ\x1d\x00\n\x190X/FU%O\x1a\x0c.\x03\x10"
b'\x02\x1dE\x13\x06\t\x1c%Q:2\x1cB&\x7f?\t9E(\x0c\x0f\x07T\x11\x1dE\x03:\x00h\x07:\x0cD\x17-\x101\x11A\x06\x1cU\x1bS\x7fS\x1b8\n>FC4\x13\x07\x1b\x1c\\5J"\x07O.\x06\x16\x0em\x04\x12'
b'\x1e\x16\x16\x17\x11\x0b\x08wS?>\x17W0\x7f\'\x173\x17\x7f\x19\x08\x1e\x11IR\x07\x11+T<\r:XE\x1c;U"\t\x18\x1b\x1aWRB0^\n<\x1c>\x15\x01)\\R\x1b\x17Mi\x19\x17\nMj\x0c\x17\x04=\x19\t'
b'\x1b\n\x17C\x00\x0f\x162\x1cw=\x0cDu+ \x04v\x101\t\x04\x01\x18\x1c\x1b\x0b\x03\x7f\x17\'\x0b<\x1d@\x06,\x104\nA\x1c\x1bD\\\x01\x1e\\\x05y\x0f%\x0bQ8G\x17\x07XJ>J"\x03L9O\x10\x08;\t]'
b'\x02\x0c\x00\x07\x01\x14\x1ewS63\x15Cu>&\x05v\r0\x1aA\x07\x1bE\x07\x16\x01\x7f\x00 \x0c,X[\x1c0G<\x00\x05\x15\x11\x10\x06N\x7fQ\x1f6\x05.FU%VR\x06\x1dZ2K?\x12Xj\x07\x17\x05(\x1f]'
b'\x04\x03\x04\x11T\x0e\x1a%T >\x0bUu>&\x05v\x160\x0b\x15\x04\x15\x17\x17E\x070\x198\n1\x1d^\x06,\x10$\r\x00\x06T@\x17S9_\x1b4L9\x0fL$_\x13\x07X_2W5\x12H%\x01\x0bGm8\x15'
b'\x1eO\x04\r\x10F\x138Gw+\x16\x10 ,-A"\r6\x1eA\x18\x1a\n\x05\t\x01;\x13-E+\x17\x10\x13)_9\x01A\x06\x1cURR:S\x1c+\x05>\x1f\x01%\\\x1e\x10\x0b\x19!K9\x0b\x01(\x1a\x1e\x0f(\x1e]'
b'4\x00\x10C\x03\x0f\x17;\x10;:\x18B;\x7f \x0e!E+\x05\x04S\x17\n\x1f\x15\r3\x11:E6\x15@\x1e:]5\x0b\x15\x01T@\x00N<U\r,\x1e/FB,_\x1e\x06XX)]v\x0eN=O\x0c\x06m\x19\x0e'
b"\x02\x1aE\x14\x1d\n\x17w\\2>\x0b^u7'\x16v\x110M\x16\x01\x1d\x11\x17E\x1d0\x01:E0\x0f^R\n^9\x1dA\x01\x1cU\x1eMs\x10\x106\x198FN:]R\x11\x01W&T?\x05\x019\x1b\x17\x1b,\x0b\x18"
b'\x02\x02\x15\n\x18\x03\twY:/\x15U8:&\x15%E/\x1f\x0e\x10\x11\x01\x07\x17\x01\x7f\x17)\t3\x0b\x10\x131Tp\r\x0e\x05TD\x1d\x01*C\x0cy\x18"\x0fRmX\x1c\x1a\x0fU"]1\x03\x01>\x00X\x08;\x03\x14'
b'\x0c\x1d\x0bC\x1c\t\x0cwD?:YS:28\x08:\x00-M\x08\x1e\x04\t\x17\x08\x011\x00;E/\n_\x11:T%\x17\x04R\x17Q\x1eM,\x10\x087\x08j\x0eN:\x13\x06\x1aXL4\\v\x12I#\x1cX\x02#\x03\n'
b'CO<\x0c\x01F\x0c>\\;\x7f\x15U4-&A>\n(M\x15\x1cT\x12\x00\x0c\x10:T1\n*\n\x10\x1d(^p0\x0f\x1b\x0c\x10\x01I:\\\x05uL3\tT?\x13\x1d\x02\x16\x19#@8\x07L#\x0cX\x1a9\x03\x0f'
b'M\x0e\x03\x05\x11\x05\x0fwD?:YS:-:\x045\x111\x08\x12\x00T\x04\x1c\x01D/\x11:\x030\n]\x131S5E\x0e\x14TD\x1aD6BI)\x1e%\x01S,^\x01[X`(Lv\x07S/O\x08\x06$\x1f\x18'
b'\x00\x1cKC-\t\x0ewG>3\x15\x109:)\x138E7\x02\x16S\x00\r\x17E\x070\x198\x0c3\x1dBR6] \t\x04\x1f\x11^\x06R\x7f@\x1b6\x0f/\x02T?VR\x16\x19U+Jv\x07O.O\x10\x06:L\t'
b'\x1fO\x15\x11\x1b\x01\t6]::\x0b\x1c\xb7\xdf\xd5A3\x0b3\x04\x06\x1b\x00\x00\x1c\x00\x00\x7f\x161E>\x16\x10\x071T5\x17\x12\x06\x15^\x16H1WI6\nj\x12I(\x13\x07\x1b\x1c\\5U/\x0fO-O\x1b\x06 \x1c\x08'
b'\x00O\x16\n\x19\x0f\x176Bw9\x0c^6+!\x0e8\x16qM5\x1b\x1d\x16R\x07\x0b0\x1fh\x0c,XG\x006D$\x00\x0fR\x12_\x00\x01/B\x06>\x1e+\x0bL(A\x01U\x0fQ(\x19!\x07O>O\x0c\x06m\x0b\x18'
b'\x0b\n\x17C\x1b\x10\x1e%V;0\x0e\x10#*$\x0f3\x17>\x0f\x08\x1f\x1d\x11\x1b\x00\x17\x7f\x00 \x04+X@\x1e>W%\x00A\x1c\x11D\x05N-[I8\x02.Fh#G\x17\x07\x16\\3\x19%\tG>\x18\x19\x1b(B]'
b"M\x08\x00\x17\x1c\x03\twD8\x7f\x0bE;\x7f)\x11&\t6\x0e\x00\x07\x1d\n\x1cE\x14-\x1b/\x17>\x15C\\\x7fc \x00\x02\x1b\x12Y\x11\x016]\x195\t'\x03O9R\x06\x1c\x17W4\x199\x00\x019\x16\x0b\x1d(\x01\x0e"
b"\x03\x08E\x17\x1bF\x172Q%1Y@'>+\x15?\x06>\x01A\x00\x1f\x0c\x1e\t\x17\x7f\x07=\x067XQ\x01\x7fX?\x12A\x06\x1b\x10\x13W0Y\ry\x1f>\x14@#T\x17U\x16L*\\$\x0fB+\x03X\x0c?\x1e\x12"
b'\x18\x01\x01C\x00\x0e\x1ewQ!:\x0bQ2:h\x11$\n8\x1f\x00\x1e\x19\x00\x00KD\x06\x1b=E(\x11\\\x1e\x7f\\5\x04\x13\x1cTX\x1dV\x7fD\x06y\x1b8\x0fU(\x13\x0b\x1a\rKgV!\x08\x01\x1f\x01\x11\x11m\x1f\x15'
b'\x1eAE7\x1c\x0f\x08wR80\x12\x10<,h\x16$\x0c+\x19\x04\x1dT\x03\x1d\x17D/\x06\'\x02-\x19]\x1f:B#E\x16\x1a\x1b\x10\x05@1DI-\x03j\x01D9\x13\x10\x10\x0cM"Kv\x07Uj\x1b\x10\x0c$\x1e]'
b'M\x1f\x17\x0c\x13\x14\x1a:]2-U\xd2\xd5\xc2h\x048\t6\n\t\x07\x11\x0b\x17\x01D=\rh\x041XE\x1c;U"\x16\x15\x13\x1aT\x1bO8\x10\x06?L>\x0eDmF\x1c\x11\x1dK+@?\x08Fj\x0c\x17\x04=\x19\t'
b'\x18O\x01\x06\x10\x0f\x186D2\x7f\x00_ -;\x04:\x03\x7f\x19\x0eS\x18\x00\x13\x17\n6\x1a/E+\x10UR<_>\x06\x04\x02\x00CRH1\x10\x1d1\x059FC"\\\x19YXM/\\8FX%\x1aX\x1e$\x00\x11'
b"\x02\x1aE\x14\x1d\n\x17w\\2>\x0b^u7'\x16v\x110M\x16\x01\x1d\x11\x17E\x1d0\x01:E0\x0f^R\n^9\x1dA\x01\x1cU\x1eMs\x10\x106\x198FN:]R\x11\x01W&T?\x05\x019\x1b\x17\x1b,\x0b\x18"
b'\x1b\n\x17\x02\x13\x03[\'B88\x0bQ82-\x13xE\x06\x02\x14S\x03\x0c\x1e\tD3\x11)\x171XX\x1d(\x10$\nA\x05\x06Y\x06D\x7fI\x06,\x1ej\tV#\x13\'\x1b\x11AgJ>\x03M&CX\x10"\x19\x0f'
b'\x08\x1b\r\x06\x06F\x0f8\x10%*\x17\x104/8\r?\x06>\x19\x08\x1c\x1aE\x02\x17\x0b8\x06)\x08,V\x10!/U3\x0c\x07\x1b\x17\x10\x1bL/\\\x0c4\t$\x12@9Z\x1d\x1b\x0b\x19(_v\x15X9\x1b\x1d\x04>L\x1e'
b'\x1f\x01\x0c\r\x13F\x0f?Uw<\x16^6:8\x15%E6\x03A\x07\x1c\x0c\x01E\x060\x1b#I\x7f\x0cX\x171\x10)\n\x14R\x03Y\x1eM\x7fR\x0cy\x03$FX"F\x00U\x0fX>\x19"\t\x01(\n\x1b\x06 \x05\x13'
b"\x04\n\x16C\x00\x0e\x1a#\x10'3\x18W :h\x0f3\x11(\x02\x13\x18T\x04\x1c\x01D\x16\x1a<\x00-\x16U\x06\x7fC?\x03\x15\x05\x15B\x17\x0f\x7fi\x06,L=\x0fM!\x13\x1e\x10\x19K)\x19>\tVj\x1b\x17I?\t\x1e"
b'\x18\x01E\x02\x04\x16\x17>S6+\x10_;\x7f8\x139\x02-\x0c\x0c\x00ZE!\x15\x01<\x1d.\x0c<XY\x1f/\\5\x08\x04\x1c\x00Q\x06H0^\x1ay\x03,FR4@\x06\x10\x15JgZ>\x07O-\nX\x06;\t\x0f'
b'\x01\x0e\x17C\x12\x13\x154D>0\x17C{\x7f\x1c\t?\x16\x7f\x0f\x0e\x1c\x1fE\x1b\x16D(\x06!\x11+\x1d^R9_"E\x11\x00\x1bW\x00@2]\x0c+\x1fj\x11I"\x13\x05\x14\x16MgM9FF/\x1bX\x0b(\x18\t'
b'\x1a\x0e\x1cC\x00\x0e\x1a#\x1040\x14@ +-\x13%E-\x08\x11\x01\x11\x16\x17\x0b\x10\x7f\x1a=\x08=\x1dB\x01q\x10\t\n\x14R\x03Y\x1eM\x7f\\\x0c8\x1e$FI"DR\x01\x17\x19(I"\x0fL#\x15\x1dI4\x03\x08'
b"\x14O\x00\x11\x06\t\t$\x103*\x0bY;8h\r?\x0b4\x04\x0f\x14T\x11\x1a\x04\x10\x7f\x17'\x0b9\x17E\x1c;\x10$\r\x04R\x15F\x17S>W\x0cy\x1c8\tF?R\x1f\x18\x1dKi\x19\x0f\tTj\x18\x11\x05!L\x11"
b"M\x0e\x0b\x07T\x15\x141D >\x0bUu<'\x0c&\n1\x08\x0f\x07\x07E\x06\r\x05+T8\x00-\x1e_\x002\x10#\x0c\x0c\x1b\x18Q\x00\x019E\x07:\x18#\tO>\x1dR!\x10P4\x194\tN!O\x11\x1am\x1b\x0f"
b'\tO\x11\x0b\x11F\x1a!U%>\x1eUu/:\x0e1\x17>\x00\x0c\x16\x06KR<\x0b*T?\x0c3\x14\x10\x1e:Q"\x0bA\x1a\x1bGRU0\x10\x1e+\x05>\x03\x014\\\x07\x07XV0Wv3O#\x17X\x1a%\t\x11'
b'\x1d\x1d\n\x04\x06\x07\x16$\x1ew\x06\x16Eu>:\x04v\x020\x04\x0f\x14T\x11\x1dE\x08:\x15:\x0b\x7f\x08B\x13<D9\x06\x00\x1eTC\x19H3\\\x1ay\x1f?\x05ImR\x01U\x10V0\x19"\t\x01+\x19\x17\x00)L\x0e'
b'\x08\x01E\x1a\x1b\x13\tw_ 1Yg0=h\x123\x17)\x08\x13]T<\x1d\x10D(\x1d$\t\x7f\x14U\x13-^p\x11\t\x17T@\x00N2Y\x1a<\x1fj\x07O)\x13\x02\x1c\x0c_&U:\x15\x01%\tX\n"\x02\x1e'
b'\x08\x1b\r\x06\x06F\x0f8\x10%*\x17\x104/8\r?\x06>\x19\x08\x1c\x1aE\x02\x17\x0b8\x06)\x08,V\x10!/U3\x0c\x07\x1b\x17\x10\x1bL/\\\x0c4\t$\x12@9Z\x1d\x1b\x0b\x19(_v\x15X9\x1b\x1d\x04>L\x1e'
b"\x02\x1a\x0b\x07T\x12\x132\x106)\x1cB48-A&\x170\n\x13\x12\x19\x08\x17\x17J\x7f-'\x10\x7f\x0fY\x1e3\x10<\x00\x00\x00\x1a\x10\x1aN(\x10\x1d6L=\x14H9VR\x0c\x17L5\x199\x11Oj:\x16\x005L\x0e"
b'\x0e\x00\x0b\x00\x11\x16\x0f$\x10>1YD=6;A4\n0\x06MS\x00\r\x17\x0bD&\x1b=E(\x11\\\x1e\x7fR5E\x0e\x1cTI\x1dT-\x10\x1e8\x15j\x12NmQ\x17\x16\x17T.W1F@j\x1d\x19\x1b(L\x9f'
b'M\x0c\n\r\x12\t\x0e9Tw+\x11Uu>>\x04$\x048\x08A\x03\x06\n\x15\x17\x052\x19-\x17qXi\x1d*\x10\'\x0c\r\x1eT\\\x17@-^I1\x03=FU"\x13\x05\x07\x11M"\x19/\tT8O\x17\x1e#L('
b"\x00\n\x0b\x17\x07F\x0b%_4:\x1dE':h\x027\t3\x1eA\x12\x1a\x01R\r\x0b(T<\n\x7f\rC\x17\x7fD8\x0c\x12R\x1f^\x1dV3U\r>\tj\x12NmR\x04\x1a\x11]gM>\x03\x019\n\x1b\x1c?\x05\t"
b'M\x0b\x10\x11\x1d\x08\x1cw\\>1\x12Y;8h\x15>\x04+M\x02\x1c\x1a\x03\x1d\x10\n;T<\r:XQ\x04:B1\x02\x04R\x04B\x1dF-Q\x044\t8H\x01\x14\\\x07U\x0fP+Uv\nD+\x1d\x16I%\x03\n'
b'\x05\nE\x14\x15\x1f[#X6+YS:28\x14"\x00-\x1eA\x01\x11\x15\x00\x00\x17:\x1a<E1\r]\x10:B#KA+\x1bERV6\\\x05y\x00/\x07S#\x13\x1a\x1a\x0f\x193Vv\tQ>\x06\x15\x007\t]'
b'\x03\x0b\x00\x11\x18\x1f\x129Ww<\x16]%*<\x04$E,\x14\x12\x07\x11\x08R\x04\n;T!\x11,XY\x1f/Q3\x11A\x1d\x1a\x10\x0bN*BI8\x1c:\nH.R\x06\x1c\x17WgI$\tF8\x0e\x15\x1acL$'
b'\x03\x1b\x00\x11\x1a\x03\x0fwC89\rG4--Ov<0\x18A\x04\x1d\t\x1eE\x08:\x15:\x0b\x7f\x10_\x05\x7fD?E\x13\x17\x17_\x15O6J\x0cy\r$\x02\x01,E\x1d\x1c\x1c\x193Q3FO+\x1c\x0c\x10m\t\x0f'
b'\x02\x02\x15\x16\x00\x03\twC.,\rU8,h\t7\x13:M\x12\x1a\x19\x0c\x1e\x04\x16\x7f\x1c)\x17;\x0fQ\x00:\x101\x0b\x05R\x07_\x14U(Q\x1b<L)\tL=\\\x1c\x10\x16M4\x19"\x0e@>O\x08\x0c?\n\x12'
b'\x03\x06\x1dC\x07\x0e\x1e;\\{\x7f\x00_ -h\x0e!\x0b\x7f\t\x18\x1d\x15\x08\x1b\x06D,\x00\'\x17>\x1fUR>\\<\n\x02\x13\x00Y\x1dO\x7f@\x08:\x07+\x01Da\x13\x13\x1b\x1c\x19"O3\x08\x013\x00\r\x1bm\x03\n'
b"\x01\n\x04\x11\x1aF\x138Gw+\x11Uu<'\x0c&\x0c3\x08\x13S\x1d\x08\x02\t\x012\x11&\x11,X@\x000S5\x01\x14\x00\x11\x10\x11@3\\\x1ay\r$\x02\x01%\\\x05U\x0cVgL%\x03\x01>\x07\x11\x1am\x07\x13"
b"\x01\n\x04\x11\x1aF\x138Gw+\x16\x10':+\x0e1\x0b6\x17\x04S\x15\x0b\x16E\x05)\x1b!\x01\x7f\x0cX\x17\x7f^1\x16\x15\x0bTU\x00S0B\x1ay\x08?\x14H#TR\x19\x11W,P8\x01\x01>\x07\x19\x1dm\x0f\x12"
b"M\x0e\x0b\x07T\x03\r2^w&\x16E'\x7f'\x168E\x08\x08\x03S\x07\x00\x00\x13\x01-Zh<0\r\x10\x056\\<E\r\x17\x15B\x1c\x01+X\x0cy\x1c8\tL$@\x17\x06XX)]v\x16H>\t\x19\x05!\x1f]"
b'\x1d\x06\t\x06\x06F\x12:@;:\x14U;+;A&\x170\x0e\x04\x17\x01\x17\x17E\x07>\x18$\x16\x7f\x19^\x16\x7fX?\x12A\x06\x1b\x10\x07R:\x10\x1d1\x059FJ#\\\x05\x19\x1d] \\v\x12Nj\x0e\x0e\x06$\x08]'
b'\x8f\xef\xf8C\x11\x08\x17>W?+\x1c^0;h\x03/E>\x03A\x06\x1a\x01\x17\x17\x17+\x15&\x016\x16WR0Vp\x11\t\x17TE\x1cE:B\x05 \x05$\x01\x01.\\\x1f\x05\rM"Kv\x15X9\x1b\x1d\x04m\r\x13'
b'\x03O\x03\x0c\x06F\x0b%_0-\x18]8::\x12v\x127\x02A\x04\x15\x0b\x06E\x100T/\x00+XR\x17+D5\x17A\x13\x00\x10\x06I:Y\x1by\x0f8\x07G9\x13\x10\x0cXL)]3\x14R>\x0e\x16\r$\x02\x1a'
b'\x02\x18\t\x06\x10\x01\x1ewD8\x7f\x18F:6,A"\r:M\x12\x16\x17\x10\x00\x0c\x10&T \n3\x1dCR9B?\x08A\x10\x01V\x14D-\x10\x06/\t8\x00M"DR\x03\rU)\\$\x07C#\x03\x11\x1d$\t\x0e'
b"\x06O\x11\x0cT\x01\x1e#X2-YD:\x7f:\x148E>\x1d\x11\x1f\x1d\x06\x13\x11\r0\x1ah\x15-\x17W\x00>]#KA!\x04U\x11H9Y\ny\x05'\x16M(^\x17\x1b\x0cX3P9\x08Rj\x00\x1eI>\x15\x0e"
b"\x08O\x1c\x0c\x01\x14[8G9\x7f,^<'h\x12>\x003\x01MS\r\n\x07\x17D0\x03&E;\x01^\x132Y3E\x12\x06\x1bB\x13F:\x10\x085\x00%\x05@9Z\x1d\x1bXI&Z=\x07F/CX\x08#\x08]"
b"M6\n\x16T\x11\x12;\\w3\x1cQ'1h\t9\x12\x7f\x19\x0eS\x1b\x15\x06\x0c\t6\x0e-E&\x17E\x00\x7fsp\x06\x0e\x16\x11\x10\x10X\x7fE\x1a0\x02-FB!V\x04\x10\n\x193K?\x05J9O\x0c\x01,\x18]"
b"M\x0e\x0b\x07T\x0b\x1e:_%&YC,,<\x04;\x16qM8\x1c\x01E\x05\x0c\x083T$\x00>\n^R7_'E\x15\x1a\x11\x10\x11N2@\x005\t8FH C\x1e\x10\x15\\)M%FQ8\x00\x1b\x0c)\x19\x0f"

exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
from Crypto.Util.number import *
from tqdm import tqdm
from collections import Counter

# 定义异或函数
strxor = lambda x, y: bytes([a ^ b for a, b in zip(x, y)])

# 读取密文文件
with open("D:\\tmp\\xorrrrrrrrr\\result.log", 'r') as f:
cipher_lines = f.readlines()

# 解析密文
ciphertexts = [eval(line.strip()) for line in cipher_lines]

# 已知 flag 头部
flag_head = b'moectf{'

# 第一步:恢复密钥头部候选
key_heads = []
for ct in ciphertexts:
# 使用已知 flag 头与密文头异或得到密钥头
key_head = strxor(flag_head, ct[:len(flag_head)])
key_heads.append(key_head)

# 第二步:使用密钥头候选解密所有可能位置
decrypted_blocks = []
for key in tqdm(key_heads, desc="Processing key heads"):
for ct in ciphertexts:
# 滑动窗口遍历密文
for i in range(len(ct) - len(flag_head) + 1):
# 截取当前窗口
block = ct[i:i+len(flag_head)]
# 使用密钥头解密
decrypted = strxor(block, key)
# 检查是否可打印(7字节解密的字符串表示为10字符)
if len(str(decrypted)) == 10:
try:
# 尝试解码为字符串
decrypted_str = decrypted.decode('ascii')
decrypted_blocks.append(decrypted_str)
except UnicodeDecodeError:
continue

# 第三步:逐步重建 flag
flag = "moectf{"
total_length = 72 # 已知 flag 总长度
progress = tqdm(total=total_length - len(flag) - 1, # 剩余需要恢复的字符数
desc="Recovering flag")

for _ in range(total_length - len(flag) - 1):
# 获取当前 flag 的最后6个字符作为上下文
context = flag[-6:]

# 收集所有匹配上下文的可能下一个字符
candidates = []
for block in decrypted_blocks:
if block.startswith(context) and len(block) == len(flag_head):
candidates.append(block[6]) # 第7个字符是下一个字符

# 如果没有候选,尝试减少上下文长度
if not candidates:
context = flag[-5:]
for block in decrypted_blocks:
if block.startswith(context) and len(block) == len(flag_head):
candidates.append(block[5])

# 如果没有候选,尝试减少上下文长度
if not candidates:
context = flag[-4:]
for block in decrypted_blocks:
if block.startswith(context) and len(block) == len(flag_head):
candidates.append(block[4])

# 统计频率并选择最常见字符
if candidates:
char_counter = Counter(candidates)
next_char = char_counter.most_common(1)[0][0]
else:
# 如果没有候选,使用占位符
next_char = '?'

flag += next_char
progress.update(1)
progress.set_postfix({"current": flag})

progress.close()
flag += '}' # 添加尾部

print("\nRecovered flag:", flag)

运行得到

最后flag为

1
moectf{W0W_y0U_HaVe_mastered_tHe_x0r_0Peart0r!_0iYlJf!M3rux9G9Vf!JoxiMl}

factor_signin

题目描述:

1
坏了,p q被狗子吃了

附件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from Crypto.Util.number import getPrime
from math import prod

with open("flag.txt","rb") as f:
flag = f.read().strip()
assert len(flag) == 72

m1 = int.from_bytes(flag[:36],"big")
m2 = int.from_bytes(flag[36:],"big")

e = 65537

p,q = getPrime(2048),getPrime(2048)
n1 = p*q
c1 = pow(m1,e,n1)
print("c1 = ",c1)
print("n1 = ",n1)

primes = [getPrime(64) for _ in range(32)]
n2 = prod(primes)
c2 = pow(m2,e,n2)
print("c2 = ",c2)
print("n2 = ",n2)

# c1 = 10004937130983861141937782436252502991050957330184611684406783226971057978666503675149401388381995491152372622456604317681236160071166819028679754762162125904637599991943368450200313304999566592294442696755822585022667008378021280392976010576970877334159755332946926433635584313137140987588847077645814987268595739733550220882135750267567373532603503399428451548677091911410732474324157868011686641243202218731844256789044721309478991918322850448456919991540932206923861653518190974620161055008847475600980152660468279765607319838003177639654115075183493029803981527882155542925959658123816315099271123470754815045214896642428657264709805029840253303446203030294879166242867850331945166255924821406218090304893024711068773287842075208409312312188560675094244318565148284432361706108491327014254387317744284876018328591380705408407853404828189643214087638328376675071962141118973835178054884474523241911240926274907256651801384433652425740230755811160476356172444327762497910600719286629420662696949923799255603628210458906831175806791599965316549386396788014703044837917283461862338269599464440202019922379625071512100821922879623930069349084917919100015782270736808388388006084027673781004085620817521378823838335749279055639005125
# n1 = 343504538870081878757729748260620800783581983635281373321527119223374418103340873199654926888439040391545101913132680017655039577253974802351999985470115474655124168592386965001556620077117966153475518658881140827499124290142523464795351995478153288872749817655925271395693435582010998996210909883510311066017237567799370371513462802547313382594409676803895262837061350017911885033133654781876923251129406855067993830824618637981136966134029212516871210627954762147349788788999116702635535406398258621926040887099782494271000823401788337120154104692934583729065189687995570122890809807661370008740283447636580308161498808092269041815719148127168137018600113465985504975054319601741498799761500526467431533990903047624407330243357514588557352746347337683868781554819821575385685459666842162355673947984514687068626166144076257334426612302554448774082488600083569900006274897032242821388126274957846236552373226099112200392102883351088570736254707966329366625911183721875374731791052229266503696334310835323523568132399330263642353927504971311717117370721838701629885670598853025212521537158141447625623337563164790788106598854822686494249848796441153496412236527242235888308435573209980270776407776277489669763803746640746378181948641
# c2 = 4948422459907576438725352912593232312182623872749480015295307088166392790756090961680588458629287353136729331282506869598853654959933189916541367579979613191505226006688017103736659670745715837820780269669982614187726024837483992949073998289744910800139692315475427811724840888983757813069849711652177078415791290894737059610056340691753379065563574279210755232749774749757141836708161854072798697882671844015773796030086898649043727563289757423417931359190238689436180953442515869613672008678717039516723747808793079592658069533269662834322438864456440701995249381880745586708718334052938634931936240736457181295
# n2 = 8582505375542551134698364096640878629785534004976071646505285128223700755811329156276289439920192196962008222418309136528180402357612976316670896973298407081310073283979903409463559102445223030866575563539261326076167685019121804961393115251287057504682389257841337573435085535013992761172452417731887700665115563173984357419855481847035192853387338980937451843809282267888616833734087813693242841580644645315837196205981207827105545437201799441352173638172133698491126291396194764373021523547130703629001683366722885529834956411976212381935354905525700646776572036418453784898084635925476199878640087165680193737

第一部分flag

n1可以分解,然后常规rsa

第二部分flag

yafu分解n2得到所有因子模型

exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
from Crypto.Util.number import long_to_bytes
from gmpy2 import invert, powmod

# 给定参数
p = 18055722101348711626577381571859114850735298658417345663254295930584841136416234624852520581982069555948490061840244710773146585295336094872892685938420880462305333393436098181186277450475949236132458958671804132443554885896037342335902958516394876382378829317303693655605215373555988755516058130500801822723195474873517960624159417903134580987202400855946137101429970119186394052011747475879598126195607938106163892658285305921071673588966184054026228745012993740035399652049777986535759039077634555909031397541116025395236871778797949216479130412500655359057128438928721459688727543057760739527720641179290282309741
q = 19024691283015651666032297670418553586155390575928421823630922553034857624430114628839720683172187406577114034710093054198921843669645736474448836706112221787749688565566635453151716934583685087745112614898780150391513798368931496744574075511968933800467288441832780919514199410584786925010518564670786685241724643282580795568609339268652910564215887176803735675069372979560024792322029911970574914829712553975379661212645059271137916107885326625543090473004683836665262304916304580076748336858662108554591235698235221618061328251985929904075811056422186525179189846420226944944513865790999242309352900287977666792901
c1 = 10004937130983861141937782436252502991050957330184611684406783226971057978666503675149401388381995491152372622456604317681236160071166819028679754762162125904637599991943368450200313304999566592294442696755822585022667008378021280392976010576970877334159755332946926433635584313137140987588847077645814987268595739733550220882135750267567373532603503399428451548677091911410732474324157868011686641243202218731844256789044721309478991918322850448456919991540932206923861653518190974620161055008847475600980152660468279765607319838003177639654115075183493029803981527882155542925959658123816315099271123470754815045214896642428657264709805029840253303446203030294879166242867850331945166255924821406218090304893024711068773287842075208409312312188560675094244318565148284432361706108491327014254387317744284876018328591380705408407853404828189643214087638328376675071962141118973835178054884474523241911240926274907256651801384433652425740230755811160476356172444327762497910600719286629420662696949923799255603628210458906831175806791599965316549386396788014703044837917283461862338269599464440202019922379625071512100821922879623930069349084917919100015782270736808388388006084027673781004085620817521378823838335749279055639005125
e = 65537
a = [
9949603102225364603, 10049235158029375571, 10547615587767500213, 10596280721192026229,
10864078180916418691, 11092420583960163379, 11853704782834170959, 12034779627328165471,
12404642343676224637, 12448177342966243757, 13062839684118954553, 13645878578452317313,
14397830993057803133, 14619040595108594017, 14678737767649343977, 14745811312384518031,
14813953870710226847, 15175734709842430433, 15211380502610462057, 15332916111580607077,
15751974537676958401, 16123604149048919099, 16408421615173973083, 16870346804576162551,
17093292308638969889, 17265001711647542137, 17289161209347211817, 17543713628803023199,
17673334943789572513, 18106525049998616747, 18345408081492711641, 18390046459144888243
]
c2 = 4948422459907576438725352912593232312182623872749480015295307088166392790756090961680588458629287353136729331282506869598853654959933189916541367579979613191505226006688017103736659670745715837820780269669982614187726024837483992949073998289744910800139692315475427811724840888983757813069849711652177078415791290894737059610056340691753379065563574279210755232749774749757141836708161854072798697882671844015773796030086898649043727563289757423417931359190238689436180953442515869613672008678717039516723747808793079592658069533269662834322438864456440701995249381880745586708718334052938634931936240736457181295
n2 = 8582505375542551134698364096640878629785534004976071646505285128223700755811329156276289439920192196962008222418309136528180402357612976316670896973298407081310073283979903409463559102445223030866575563539261326076167685019121804961393115251287057504682389257841337573435085535013992761172452417731887700665115563173984357419855481847035192853387338980937451843809282267888616833734087813693242841580644645315837196205981207827105545437201799441352173638172133698491126291396194764373021523547130703629001683366722885529834956411976212381935354905525700646776572036418453784898084635925476199878640087165680193737

# 计算 n1 = p * q
n1 = p * q

# 解密第一部分 m1
d1 = invert(e, (p - 1) * (q - 1))
m1 = powmod(c1, d1, n1)
flag_part1 = long_to_bytes(m1, 36) # 确保36字节长度

# 验证 n2 是否正确
n2_computed = 1
for prime in a:
n2_computed *= prime
assert n2_computed == n2, "n2 计算值与给定值不匹配"

# 计算 phi(n2) 并解密第二部分 m2
phi = 1
for prime in a:
phi *= (prime - 1)

d2 = invert(e, phi)
m2 = powmod(c2, d2, n2)
flag_part2 = long_to_bytes(m2, 36) # 确保36字节长度

# 组合并打印完整 flag
flag = flag_part1 + flag_part2
print("完整 flag:", flag.decode())

运行得到

最后flag为

1
moectf{fACtord6_And_YAfu_Are_6oth_good_utils_to_fACtorize_num6ers_ff90S}

rsa_signin

题目描述:

1
真 signin

附件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
with open("flag.txt","rb") as f:
flag = f.read().strip()

m = int.from_bytes(flag, "big")
e = 65537

from Crypto.Util.number import getPrime

for x in range(10):
p = getPrime(1024)
q = getPrime(1024)
n = p * q
c = pow(m, e, n)

print("n =", n)
print("c =", c)


'''
n = 17524722204224696445172535263975543817720644608816706978363749891469511686943372362091928951563219068859089058278944528021615923888948698587206920445508493551162845371086030869059282352535451058203615402089133135136481314666971507135484450966505425514285114192275051972496161810571035753943880190780759479521486741046704043699838021850105638224212696697865987677760179564370167062037563913329993433080123575434871852732981112883423565015771421868680113407260917902892944119552200927337996135278491046562185003012971570532979090484837684759828977460570826320870379601193678304983534424368152743368343335213808684523217
c = 6870605439714128574950893771863182370595667973241984289208050776870220326525943524507319708560433091378319367164606150977103661770065561661544375425887970907060665421562712515902428061727268441585629591525591001533188276465911918724808701356962871139957343861919730086334623932624184172272488406793955068827527130338853980609365042071290967556159598511667974987218999253443575482949258292953639729393456515185185102248985930422080581185292420347510600574229080211050520146551505605537486989306457793451086767402197128573781597156939709237045132856159368959981648969874765462190363842275826077556314448408825308218451
n = 24974121071274650888046048586598797033399902532613815354986756278905133499432183463847175542164798764762683121930786715931063152122056911933710481566265603626437742951648885379847799327315791800670175616973945640322985175516271373004547752061826574576722667907302681961850865961386200909397231865804894418194711076667760169256682834206788730947602211228930301853348503098156592000286467190760378847541148772869356389938999094673945092387627113807899212568399028514283219850734634544982646070106811651490010946670117927664594365986238107951837041859682547029079035013475238052160645871718246031144694712586073789250183
c = 10324627733161143472233272675096997859064721978612320424254305978486200326061730105384511258706433940176741256952824288120499229240005823611541292676234913505775165761543820764046537413943393325463602612485849366939102550336256797820440347815027443410399157963547486098366749815425187247171697678576246606105486928212486117878157055321965270364583625270716186820068538749425299073309429589410882809098930213978117176627031795312102177342499674234163614021182116065492884880492891668658240362567156235958605768725892407536211503981819707919444725863397622629226309480836486427388484176463279384813974310500625102568341
n = 14215826065753265334521416948225868542990756976323308408298887797364519400310818641526401662106853573185085731682502059761982246604277475488691297554851873224516934619888327644352138127883043558424300092247604877819821625587944308487310522092440517150600171819145803937177931473336108429889165189521078678397694303305705260759351843006130968234071638035667854938070597400634242396852782331461576526836227336952718230741560369621645218729592233657856104560425642219241082727756696967324334634822771842625681505869025740662258929200756109704988223034840699133778958569054445520305361142302393767439478256174414187983763
c = 415916446053083522663299405080903121619846594209033663622616979372099135281363175464579440520262612010099820951944229484417996994283898028928384268216113118778734726335389504987546718739928112684600918108591759061734340607527889972020273454098314620790710425294297542021830654957828983606433731988998097351888879368160881316237557097381718444193741788664735559392675419489952796677690968481917700683813252460912749931286739585465657312416977086336732056497161860235343155953578618273940135486362350057858779130960380833359506761436212727289297656191243565734621757889931250689354508999144817518599291078968866323093
n = 12221355905532691305226996552124162033756814028292708728711809229588190407700199452617060657420166395065565154239801465361510672853972152857415394695376825120759202857555325904640144375262531345320714166285999668052224661520834318497234299585219832943519644095197479639328120838919035625832361810964127485907587199925564724081163804724975965691571850962714258888527902920462746795712011579424322515292865504642938090200503979483095345893697972170153990274670257331483858538617460680462369680572833191232126527727222302641204529110948993583190295067970240051042000918629138767209918572311469915774910003970381965123241
c = 2248834602646305164283014556051672824689884721514190813323189875541899566338153534858709617544459297836048770439230174669883719627734394673012731609952869246171300132019334542245094425654362711870373095782083791160029789553806741967408922001051006100049326921742208757147339981269528740944842177729701945606827918253016001436218891580980192743564642120923356793292885805519110411357830040053435569937296612987581482128241218218550319154933831743819546558930918761162723110000328532730751591375727881221199739397698390594797621758011191224528339478784930214820615602510460640307707682865125229937141010351138099874025
n = 18152103454920389919231636321286527841833809319334215885641536161086810144890443857211776387914779781628740172079478910188540146498426564211851629962338413488555121865779016981727229209606498886170396500155102635962395243364899026418106378234307821492609778555173516000309435730752571818439328803899462791834490025768785383592935046996428331508608555503567191807692523852530836008436655164751054189301721070209363416058642811329040202582026786024825518381761299547703962502636888833428457116986351812252188468878701301184044948733274488264320930936362549028124581962244201377136969591119942276742760215403738913067567
c = 2797812094994121597295362327809389195134238119144547570610194659000554967367804835006774413888965325870488368112707535584687083342412367127561646136089638402907513075405746055834487062923240856950047936297155455745928810738711368950139327254040579266046642851362228893522740216519732851152162928545416236075387903789535000820423985522550638100049857678600662008021574841083416323980817348573062083159710189689337626277009675683473560325178417766400002763719953723259300977655801234386662217462862844994462505601804422871991694828697337752697234180117437785537788728412520613916334045368736691714704501962513954509705
n = 22877887459293720334652698748191453972019668578065068224653972884599636421200068659750242304040301306798039254241668648594556654589309801728248683586229288074709849246660525799452637187132633064172425677552176203292787732404537215347782229753837476655088638984496409603054524994383358547132112778403912563916886533181616856401929346567686400616307916690806467019665390260267596320840786982457521423178851498130935577260638269429250197050326097193841333205073650802709022947551398142692735680419453533128176592587955634333425401930362881423044363132586170013458300714163531162544301477356808388416864173949089028317961
c = 12271947322974809255127222556723394446467844330408506340843897575503534175121932185624776713618037572593449207329510171212097269297133492090526270770286000839978630002819714376964416081198925899119135271459404333829811516667576167576916805217016117373027245648473458331936273975110163065432285322832123169216976420362833557809289561705091817949915218278430834098156335989014645979633658818904753942786129126233956314517292746008579152368541316795082120147520597254020266752859205131887527661767589367756335766220841483940854397440079467053684289006956034944336788288196391829411432383541473132962783883758561108297747
n = 19844333358004073542783728196775487079202832688982038135532362073659058674903791697765527614270399097276261983744620537925712167578187109058145015032736796457938148615396547198728652435169126585595701228287449135664667959433491335769206692390262797325133960778920452511673878233190120432257482339068405290918739453464061987163074129048150451046315248186376609350095502130018696275764450248681787926130463463923862832714969425813770847493135627599129546112143050369344208092649256659330284904392961574494907186727388685504929586018639846040474616307662546605623294842316524163106100888851228858194942825157286544846177
c = 9531264751315473345056673937611382755236533664089452852716992791452558274873158812669513178040971923528201631609089069182049526587423864397527252061341857426422965190913745048414029690931254119437249218321954899956104589066479231204536856131403590472063496956452030342299863907499976917750846369802185896519725837163530049157920978007252920334447236842959033879772444475877613295594785710745889554296655932909212643500877218304116451889820444820534937901427158918411546484157737612926382420354101675658160847653151539420222526999426483473829341628599881460824765758346670633385844187252696874025582747177333702736465
n = 16956880944655068255446705024149899655327230949463546092744762226005904114738078692036960935391303255804754787864713189658290361949509917704853428701870609882427423574672772606814823959758208695540116440342488334213300943604780971422918744381486937517952553797134323570131582724393100092308466968491068503301604506186521656059375518680612292667310641047190088814753025794048591445267711939066523165042651430468971452726568222388482323097260496415484997546126185688914792795834046855221759289007609518312601640548469651358391745947588643697900883634533872314566389446271647587564348026861264979727062157272541149018781
c = 16110326928338602237561005337578085623028116490564329920738844771341250444164294693848130674347672763073995755532723894042946521372321947507527854966013459795492930736187058535665041545095683801386814190612817128504426590828954205050425979880047802547011117626354405687170961272200066258220699329112978151044633994329352673342582175349200008181837211288847301836681860817044391028992501763375849046751094019224570802498414368189170656992427042010362385494565216988561215657424755648213390551881450141899860811844684546992754530755092358644968088017107313907435586729574798046187046145596726569637758312033849476689378
n = 16472195897077185060734002588086375750797253422014472876266294484788862733424113898147596402056889527985731623940969291811284437034420929030659419753779530635563455664549165618528767491631867637613948406196511848103083967995689432928779805192695209899686072900265108597626632371718430059561807147486376536203800038054012500244392964187780217667805308512187849789773573138494622201856638931435423778275004491853486855300574479177472267767506041000072575623287557610576406578525902565241580838652860552046216587141709709405062150243990097835181557208274750462554811004137033087430556692966525170882625891516050207318491
c = 11867731823522211833301190385669833752050387304375114576570892885641949969365352586215693183003550684262313893105989683214739695968039039944442567581277252581988489020834299896625977474857889570528169919064941042132119301236852358823696947330423679033138054012027878783478922023431469564210485180679933264749281963405243082505688901662659030897104957499953192201440290084373968716271056483463909282407034181891901928790601973222643210525000717355062752079302291729448234374709852429885984987094307177760741403086538949190424454337896501402430653783597070178968921411867485584517214777073301007918941216316241784521708
n = 13890749889361612188368868998653029697326614782260719535555306236512452110708495623964530174188871342332417484996749651846510646453983388637377706674890018646246874688969342600780781646175634455109757266442675502522791531161284420286435654971819525519296719668701529481662071464145515727217108362496784024871976015116522898184301395037566514980846499856316532479656908169681719288258287756566886281183699239684997698487409138330229321935477734921670373632304542254938831218652340699024011371979519574576890581492623709896310465567043899767342676912434857372520308852745792360420376574037705943820090308501053778144141
c = 6250115196713939477947942995075509357173312813431601073354390451609559579925704891503987992181988654989477525811826607070378476102616752398280691012244301950194800995432882828020405062344160270290542566163969692748126314259624623341922057435728127596172871894887055305291345372720594481096374310285437492746765510292863238933163142677773310305789984897974266961231555124787205980411992251387207335655129551950825339766848166539671565212408741432649813058363660321480995187545006718837863674527475323414266732366507905974800565463011676462244368010182725161416783875646259625352308599198614681446394427674340328493047
n = 21457499145521259498911107987303777576783467581104197687610588208126845121702391694574491025398113729462454256070437978257494064504146718372095872819969887408622112906108590961892923178192792218161103488204912792358327748493857104191029765218471874759376809136402361582721860433355338373725980783308091544879562698835405262108188595630215081260699112737457564998798692048522706388318528370551365364702529068656665853097899157141017378975007689790000067275142731212069030175682911154288533716549782283859340452266837760560153014200605378914071410125895494331253564598702942990036163269043699029806343766286247742865671
c = 6269656777204332618433779865483197625538144405832409880710764183039800286008967127279281167109250083159801218370191973055663058165456565194979210256278526713608759141588082614531352489547674696723140599892318118960648862531538435596775798128845789504910467783731144808685373807716609662688064728614003904579841055786083326311313295311152563668422289435606771091246147867715987583149743032723028324394173498623642539175178996531881058274717907066845565199058931743481410454382746158558886667761300257488769795092777021292335562818583719708133179974425584610403335487082478848975656282384575767178925517257692365828720
'''

exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
from math import gcd
from Crypto.Util.number import long_to_bytes

# Given values
e = 65537
ns = [
17524722204224696445172535263975543817720644608816706978363749891469511686943372362091928951563219068859089058278944528021615923888948698587206920445508493551162845371086030869059282352535451058203615402089133135136481314666971507135484450966505425514285114192275051972496161810571035753943880190780759479521486741046704043699838021850105638224212696697865987677760179564370167062037563913329993433080123575434871852732981112883423565015771421868680113407260917902892944119552200927337996135278491046562185003012971570532979090484837684759828977460570826320870379601193678304983534424368152743368343335213808684523217,
24974121071274650888046048586598797033399902532613815354986756278905133499432183463847175542164798764762683121930786715931063152122056911933710481566265603626437742951648885379847799327315791800670175616973945640322985175516271373004547752061826574576722667907302681961850865961386200909397231865804894418194711076667760169256682834206788730947602211228930301853348503098156592000286467190760378847541148772869356389938999094673945092387627113807899212568399028514283219850734634544982646070106811651490010946670117927664594365986238107951837041859682547029079035013475238052160645871718246031144694712586073789250183,
14215826065753265334521416948225868542990756976323308408298887797364519400310818641526401662106853573185085731682502059761982246604277475488691297554851873224516934619888327644352138127883043558424300092247604877819821625587944308487310522092440517150600171819145803937177931473336108429889165189521078678397694303305705260759351843006130968234071638035667854938070597400634242396852782331461576526836227336952718230741560369621645218729592233657856104560425642219241082727756696967324334634822771842625681505869025740662258929200756109704988223034840699133778958569054445520305361142302393767439478256174414187983763,
12221355905532691305226996552124162033756814028292708728711809229588190407700199452617060657420166395065565154239801465361510672853972152857415394695376825120759202857555325904640144375262531345320714166285999668052224661520834318497234299585219832943519644095197479639328120838919035625832361810964127485907587199925564724081163804724975965691571850962714258888527902920462746795712011579424322515292865504642938090200503979483095345893697972170153990274670257331483858538617460680462369680572833191232126527727222302641204529110948993583190295067970240051042000918629138767209918572311469915774910003970381965123241,
22877887459293720334652698748191453972019668578065068224653972884599636421200068659750242304040301306798039254241668648594556654589309801728248683586229288074709849246660525799452637187132633064172425677552176203292787732404537215347782229753837476655088638984496409603054524994383358547132112778403912563916886533181616856401929346567686400616307916690806467019665390260267596320840786982457521423178851498130935577260638269429250197050326097193841333205073650802709022947551398142692735680419453533128176592587955634333425401930362881423044363132586170013458300714163531162544301477356808388416864173949089028317961,
19844333358004073542783728196775487079202832688982038135532362073659058674903791697765527614270399097276261983744620537925712167578187109058145015032736796457938148615396547198728652435169126585595701228287449135664667959433491335769206692390262797325133960778920452511673878233190120432257482339068405290918739453464061987163074129048150451046315248186376609350095502130018696275764450248681787926130463463923862832714969425813770847493135627599129546112143050369344208092649256659330284904392961574494907186727388685504929586018639846040474616307662546605623294842316524163106100888851228858194942825157286544846177,
16956880944655068255446705024149899655327230949463546092744762226005904114738078692036960935391303255804754787864713189658290361949509917704853428701870609882427423574672772606814823959758208695540116440342488334213300943604780971422918744381486937517952553797134323570131582724393100092308466968491068503301604506186521656059375518680612292667310641047190088814753025794048591445267711939066523165042651430468971452726568222388482323097260496415484997546126185688914792795834046855221759289007609518312601640548469651358391745947588643697900883634533872314566389446271647587564348026861264979727062157272541149018781,
16472195897077185060734002588086375750797253422014472876266294484788862733424113898147596402056889527985731623940969291811284437034420929030659419753779530635563455664549165618528767491631867637613948406196511848103083967995689432928779805192695209899686072900265108597626632371718430059561807147486376536203800038054012500244392964187780217667805308512187849789773573138494622201856638931435423778275004491853486855300574479177472267767506041000072575623287557610576406578525902565241580838652860552046216587141709709405062150243990097835181557208274750462554811004137033087430556692966525170882625891516050207318491,
13890749889361612188368868998653029697326614782260719535555306236512452110708495623964530174188871342332417484996749651846510646453983388637377706674890018646246874688969342600780781646175634455109757266442675502522791531161284420286435654971819525519296719668701529481662071464145515727217108362496784024871976015116522898184301395037566514980846499856316532479656908169681719288258287756566886281183699239684997698487409138330229321935477734921670373632304542254938831218652340699024011371979519574576890581492623709896310465567043899767342676912434857372520308852745792360420376574037705943820090308501053778144141,
21457499145521259498911107987303777576783467581104197687610588208126845121702391694574491025398113729462454256070437978257494064504146718372095872819969887408622112906108590961892923178192792218161103488204912792358327748493857104191029765218471874759376809136402361582721860433355338373725980783308091544879562698835405262108188595630215081260699112737457564998798692048522706388318528370551365364702529068656665853097899157141017378975007689790000067275142731212069030175682911154288533716549782283859340452266837760560153014200605378914071410125895494331253564598702942990036163269043699029806343766286247742865671
]

cs = [
6870605439714128574950893771863182370595667973241984289208050776870220326525943524507319708560433091378319367164606150977103661770065561661544375425887970907060665421562712515902428061727268441585629591525591001533188276465911918724808701356962871139957343861919730086334623932624184172272488406793955068827527130338853980609365042071290967556159598511667974987218999253443575482949258292953639729393456515185185102248985930422080581185292420347510600574229080211050520146551505605537486989306457793451086767402197128573781597156939709237045132856159368959981648969874765462190363842275826077556314448408825308218451,
10324627733161143472233272675096997859064721978612320424254305978486200326061730105384511258706433940176741256952824288120499229240005823611541292676234913505775165761543820764046537413943393325463602612485849366939102550336256797820440347815027443410399157963547486098366749815425187247171697678576246606105486928212486117878157055321965270364583625270716186820068538749425299073309429589410882809098930213978117176627031795312102177342499674234163614021182116065492884880492891668658240362567156235958605768725892407536211503981819707919444725863397622629226309480836486427388484176463279384813974310500625102568341,
415916446053083522663299405080903121619846594209033663622616979372099135281363175464579440520262612010099820951944229484417996994283898028928384268216113118778734726335389504987546718739928112684600918108591759061734340607527889972020273454098314620790710425294297542021830654957828983606433731988998097351888879368160881316237557097381718444193741788664735559392675419489952796677690968481917700683813252460912749931286739585465657312416977086336732056497161860235343155953578618273940135486362350057858779130960380833359506761436212727289297656191243565734621757889931250689354508999144817518599291078968866323093,
2248834602646305164283014556051672824689884721514190813323189875541899566338153534858709617544459297836048770439230174669883719627734394673012731609952869246171300132019334542245094425654362711870373095782083791160029789553806741967408922001051006100049326921742208757147339981269528740944842177729701945606827918253016001436218891580980192743564642120923356793292885805519110411357830040053435569937296612987581482128241218218550319154933831743819546558930918761162723110000328532730751591375727881221199739397698390594797621758011191224528339478784930214820615602510460640307707682865125229937141010351138099874025,
12271947322974809255127222556723394446467844330408506340843897575503534175121932185624776713618037572593449207329510171212097269297133492090526270770286000839978630002819714376964416081198925899119135271459404333829811516667576167576916805217016117373027245648473458331936273975110163065432285322832123169216976420362833557809289561705091817949915218278430834098156335989014645979633658818904753942786129126233956314517292746008579152368541316795082120147520597254020266752859205131887527661767589367756335766220841483940854397440079467053684289006956034944336788288196391829411432383541473132962783883758561108297747,
9531264751315473345056673937611382755236533664089452852716992791452558274873158812669513178040971923528201631609089069182049526587423864397527252061341857426422965190913745048414029690931254119437249218321954899956104589066479231204536856131403590472063496956452030342299863907499976917750846369802185896519725837163530049157920978007252920334447236842959033879772444475877613295594785710745889554296655932909212643500877218304116451889820444820534937901427158918411546484157737612926382420354101675658160847653151539420222526999426483473829341628599881460824765758346670633385844187252696874025582747177333702736465,
16110326928338602237561005337578085623028116490564329920738844771341250444164294693848130674347672763073995755532723894042946521372321947507527854966013459795492930736187058535665041545095683801386814190612817128504426590828954205050425979880047802547011117626354405687170961272200066258220699329112978151044633994329352673342582175349200008181837211288847301836681860817044391028992501763375849046751094019224570802498414368189170656992427042010362385494565216988561215657424755648213390551881450141899860811844684546992754530755092358644968088017107313907435586729574798046187046145596726569637758312033849476689378,
11867731823522211833301190385669833752050387304375114576570892885641949969365352586215693183003550684262313893105989683214739695968039039944442567581277252581988489020834299896625977474857889570528169919064941042132119301236852358823696947330423679033138054012027878783478922023431469564210485180679933264749281963405243082505688901662659030897104957499953192201440290084373968716271056483463909282407034181891901928790601973222643210525000717355062752079302291729448234374709852429885984987094307177760741403086538949190424454337896501402430653783597070178968921411867485584517214777073301007918941216316241784521708,
6250115196713939477947942995075509357173312813431601073354390451609559579925704891503987992181988654989477525811826607070378476102616752398280691012244301950194800995432882828020405062344160270290542566163969692748126314259624623341922057435728127596172871894887055305291345372720594481096374310285437492746765510292863238933163142677773310305789984897974266961231555124787205980411992251387207335655129551950825339766848166539671565212408741432649813058363660321480995187545006718837863674527475323414266732366507905974800565463011676462244368010182725161416783875646259625352308599198614681446394427674340328493047,
6269656777204332618433779865483197625538144405832409880710764183039800286008967127279281167109250083159801218370191973055663058165456565194979210256278526713608759141588082614531352489547674696723140599892318118960648862531538435596775798128845789504910467783731144808685373807716609662688064728614003904579841055786083326311313295311152563668422289435606771091246147867715987583149743032723028324394173498623642539175178996531881058274717907066845565199058931743481410454382746158558886667761300257488769795092777021292335562818583719708133179974425584610403335487082478848975656282384575767178925517257692365828720
]

# Find a common factor in any pair of moduli
found = False
for i in range(len(ns)):
for j in range(i+1, len(ns)):
g = gcd(ns[i], ns[j])
if g != 1:
print(f"Common factor found between n{i+1} and n{j+1}:")
print(f"p = {g}")
# Use the first modulus of the pair to decrypt
n = ns[i]
c = cs[i]
p = g
q = n // p
# Ensure n is factored correctly
if p * q != n:
continue
# Compute phi and d
phi = (p - 1) * (q - 1)
d = pow(e, -1, phi)
m = pow(c, d, n)
flag = long_to_bytes(m).decode()
print(f"Flag: {flag}")
found = True
break
if found:
break

if not found:
print("No common factors found. Try another approach.")

运行得到

最后flag为

1
moectf{it_is_re@lly_@_signin_level_cryPto_ch@ll@nge_ng92WPIBung92WPIBun}

|p-q|

题目描述:

1
what will next_prime cause?

附件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
with open("flag.txt","rb") as fs:
flag = fs.read().strip()
assert len(flag) == 72

m = int.from_bytes(flag,"big")

from Crypto.Util.number import getPrime, isPrime

def next_prime(p):
while True:
p += 2
if isPrime(p):
return p

p = getPrime(2048)
q = next_prime(p)
n = p * q
e = 65537
c = pow(m,e,n)
print("n =",n)
print("c =",c)

# n = 329960318345010350458589325571454799968957932130539403944044204698872359769449414256378111233592533561892402020955736786563103586897940757198920737583107357264433730515123570697570757034221232010688796344257587359198400915567115397034901247038275403825404094129637119512164953012131445747740645183682571690806238508035172474685818036517880994658466362305677430221344381425792427288500814551334928982040579744048907401043058567486871621293983772331951723963911377839286050368715384227640638031857101612517441295926821712605955984000617738833973829140899288164786111118033301974794123637285172303688427806450817155786233788027512244397952849209700013205803489334055814513866650854230478124920442832221946442593769555237909177172933634236392800414176981780444770542047378630756636857018730168151824307814244094763132088236333995807013617801783919113541391133267230410179444855465611792191833319172887852945902960736744468250550722314565805440432977225703650102517531531476188269635151281661081058374242768608270563131619806585194608795817118466680430500830137335634289617464844004904410907221482919453859885955054140320857757297655475489972268282336250384384926216818756762307686391740965586168590784252524275489515352125321398406426217
# c = 307746143297103281117512771170735061509547958991947416701685589829711285274762039205145422734327595082350457374530975854337055433998982493020603245187129916580627539476324521854057990929173492940833073106540441902619425074887573232779899379436737429823569006431370954961865581168635086246592539153824456681688944066925973182272443586463636373955966146029489121226571408532284480270826510961605206483011204059402338926815599691009406841471142048842308786000059979977645988396524814553253493672729395573658564825709547262230219183672493306100392069182994445509803952976016630731417479238769736432223194249245020320183199001774879893442186017555682902409661647546547835345461056900610391514595370600575845979413984555709077635397717741521573798309855584473259503981955303774208127361309229536010653615696850725905168242705387575720694946072789441481191449772933265705810128547553027708513478130258801233619669699177901566688737559102165508239876805822898509541232565766265491283807922473440397456701500524925191214292669986798631732639221198138026031561329502985577205314190565609214349344303324429408234237832110076900414483795318189628198913032900272406887003325858236057373096880675754802725017537119549989304878960436575670784578550

exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
from Crypto.Util.number import isPrime, long_to_bytes
import math

n = 329960318345010350458589325571454799968957932130539403944044204698872359769449414256378111233592533561892402020955736786563103586897940757198920737583107357264433730515123570697570757034221232010688796344257587359198400915567115397034901247038275403825404094129637119512164953012131445747740645183682571690806238508035172474685818036517880994658466362305677430221344381425792427288500814551334928982040579744048907401043058567486871621293983772331951723963911377839286050368715384227640638031857101612517441295926821712605955984000617738833973829140899288164786111118033301974794123637285172303688427806450817155786233788027512244397952849209700013205803489334055814513866650854230478124920442832221946442593769555237909177172933634236392800414176981780444770542047378630756636857018730168151824307814244094763132088236333995807013617801783919113541391133267230410179444855465611792191833319172887852945902960736744468250550722314565805440432977225703650102517531531476188269635151281661081058374242768608270563131619806585194608795817118466680430500830137335634289617464844004904410907221482919453859885955054140320857757297655475489972268282336250384384926216818756762307686391740965586168590784252524275489515352125321398406426217
c = 307746143297103281117512771170735061509547958991947416701685589829711285274762039205145422734327595082350457374530975854337055433998982493020603245187129916580627539476324521854057990929173492940833073106540441902619425074887573232779899379436737429823569006431370954961865581168635086246592539153824456681688944066925973182272443586463636373955966146029489121226571408532284480270826510961605206483011204059402338926815599691009406841471142048842308786000059979977645988396524814553253493672729395573658564825709547262230219183672493306100392069182994445509803952976016630731417479238769736432223194249245020320183199001774879893442186017555682902409661647546547835345461056900610391514595370600575845979413984555709077635397717741521573798309855584473259503981955303774208127361309229536010653615696850725905168242705387575720694946072789441481191449772933265705810128547553027708513478130258801233619669699177901566688737559102165508239876805822898509541232565766265491283807922473440397456701500524925191214292669986798631732639221198138026031561329502985577205314190565609214349344303324429408234237832110076900414483795318189628198913032900272406887003325858236057373096880675754802725017537119549989304878960436575670784578550
e = 65537

# 计算n的整数平方根
sqrt_n = math.isqrt(n)

# 从平方根开始向下寻找质因数p
p = None
test_p = sqrt_n if sqrt_n % 2 == 1 else sqrt_n - 1 # 确保是奇数

while test_p > 2:
if n % test_p == 0:
p = test_p
break
test_p -= 2

if p is None:
raise ValueError("未找到质因数")

# 计算另一个质因数
q = n // p

# 验证q是p的下一个质数
def is_next_prime(a, b):
"""检查b是否是a的下一个质数"""
if a >= b or not isPrime(a) or not isPrime(b):
return False
# 检查a和b之间是否有其他质数
for num in range(a + 2, b, 2):
if isPrime(num):
return False
return True

if not is_next_prime(p, q):
raise ValueError("q不是p的下一个质数")

# 计算私钥
phi = (p - 1) * (q - 1)
d = pow(e, -1, phi)

# 解密密文
m = pow(c, d, n)
flag = long_to_bytes(m).decode()

print("破解成功! Flag:", flag)

运行得到

最后flag为

1
moectf{it_iS_vUlnErablE_iF_p_iS_aboUt_thE_SaME_SiZE_aS_Q_MVoAYArrlG3uco}

n&n

题目描述:

1
modulus and modulus~

附件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from Crypto.Util.number import *

p = getPrime(1024)
q = getPrime(1024)

with open("flag.txt","r") as f:
flag = f.read().strip().encode()

m = bytes_to_long(flag)
n = p * q
e1 = 0x114514
e2 = 19198101

c1 = pow(m,e1,n)
c2 = pow(m,e2,n)
print(c1)
print(c2)
print(n)

# 5776799746376051463605370130675046329799612910435315968508603116759552095183027263116443417343895252766060748671845650457077393391989018107887540639775168897954484319381180406512474784571389477212123123540984850033695748142755414954158933345476509573211496722528388574841686164433315356667366007165419697987147258498693175698918104120849579763098045116744389310549687579302444264316133642674648294049526615350011916160649448726069001139749604430982881450187865197137222762758538645387391379108182515717949428258503254717940765994927802512049427407583200118969062778415073135339774546277230281966880715506688898978925
# 4664955020023583143415931782261983177552050757537222070347847639906354901601382630034645762990079537901659753823666851165175187728532569040809797389706253282757017586285211791297567893874606446000074515260509831946210526182765808878824360460569061258723122198792244018463880052389205906620425625708718545628429086424549277715280217165880900037900983008637302744555649467104208348070638137050458275362152816916837534704113775562356277110844168173111385779258263874552283927767924979691542028126412133709129601685315027689094437957165812994784648540588277901241854031439324974562449032290219652206466731675967045633360
# 13612969130810965900902742090064423006385890357159609755971027204203418808937093492927060428980020085273603754747223030702684866992231913349067578014240319426522039068836171388168087260774376277346092066880984406890296520951318296354893551565670293486797637522297989653182109744864444697818991039473180752980752117041574628063002176339235126861152739066489620021077091941250365101779354009854706729448088217051728432010328667839532327286559570597994183126402340332924370812383312664419874352306052467284992411543921858024469098268800500500651896608097346389396273293747664441553194179933758992070398387066135330851531

共模攻击,直接一把梭

最后flag为

1
moectf{dO_nOt_u53_5AM3_MOdulu5_tO_3ncrYPt_dIFF3r3nt_dAtA!_JY63x33iiA0Ji}

ez_chain

题目描述:

1
你说的对,但是我的key呢?

附件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from Crypto.Util.number import *

with open("key.txt", "r") as fs:
key = int(fs.read().strip())
with open("flag.txt", "rb") as fs:
flag = fs.read().strip()
assert len(flag) == 72

m = bytes_to_long(flag)

base = bytes_to_long(b"koito")
iv = 3735927943

def blockize(long):
out = []
while long > 0:
out.append(long % base)
long //= base
return list(reversed(out))


blocks = blockize(m)


def encrypt_block_cbc(blocks, iv, key):
encrypted = [iv]
for i in range(len(blocks)):
encrypted.append(blocks[i] ^ encrypted[i] ^ key)
return encrypted[1:]


print(encrypt_block_cbc(blocks, iv, key))
# [8490961288, 122685644196, 349851982069, 319462619019, 74697733110, 43107579733, 465430019828, 178715374673, 425695308534, 164022852989, 435966065649, 222907886694, 420391941825, 173833246025, 329708930734]

exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
from Crypto.Util.number import bytes_to_long, long_to_bytes

# 给定参数
base = 461430682735 # bytes_to_long(b"koito")
iv = 3735927943
blocks = [8490961288, 122685644196, 349851982069, 319462619019, 74697733110,
43107579733, 465430019828, 178715374673, 425695308534, 164022852989,
435966065649, 222907886694, 420391941825, 173833246025, 329708930734]

# 分块函数
def blockize(long):
out = []
while long > 0:
out.append(long % base)
long //= base
return list(reversed(out))

# 重组函数
def deblockize(blocks):
out = 0
for block in blocks:
out *= base
out += block
return out

# CBC 解密函数
def decrypt_block_cbc(blocks, iv, key):
encrypted = [iv] + blocks # 创建加密块列表 [iv, c0, c1, ...]
decrypted = []
for i in range(len(blocks)):
# 解密公式: plain = cipher[i] ^ encrypted[i] ^ key
decrypted.append(encrypted[i] ^ encrypted[i+1] ^ key)
return decrypted

# 计算密钥
# 1. 创建固定字符串: b"moectf{" + 64*b"A" + b"}"
fixed_string = b"moectf{" + b"A"*64 + b"}"
# 2. 转换为长整数
fixed_long = bytes_to_long(fixed_string)
# 3. 分块并取第一个块
fixed_blocks = blockize(fixed_long)
fixed_first_block = fixed_blocks[0] if fixed_blocks else 0

# 4. 计算密钥: key = fixed_first_block ^ iv ^ blocks[0]
key = fixed_first_block ^ iv ^ blocks[0]

print(f"Calculated key: {key}")

# 解密数据
decrypted_blocks = decrypt_block_cbc(blocks, iv, key)

# 重组为长整数
decrypted_long = deblockize(decrypted_blocks)

# 转换为字节
flag_bytes = long_to_bytes(decrypted_long)

# 输出结果
try:
flag = flag_bytes.decode('utf-8')
print("Decrypted flag:", flag)
except UnicodeDecodeError:
print("Decrypted bytes (hex):", flag_bytes.hex())
print("Decrypted bytes:", flag_bytes)

运行得到

最后flag为

1
moectf{thE_c6c_Is_not_so_hard_9ifxi9i!JGofMJ36D9cPMxroif6!M6oSMuliPPcA3}

flag_exchange

题目描述:

1
2
3
“你这flag多少钱一斤?”

“白给。”

附件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from Crypto.Util.number import isPrime
from random import getrandbits

with open("flag.txt","rb") as fs:
flag = fs.read().strip()

def diffie_hellman(p, flag):
alice_privKey = getrandbits(1024)
alice_pubKey = pow(7, alice_privKey, p)
bob_privKey = getrandbits(1024)
bob_pubKey = pow(7, bob_privKey, p)

superkey = pow(bob_pubKey, alice_privKey, p)
m = int.from_bytes(flag, 'big')
return (m * superkey) % p, alice_pubKey, bob_pubKey


from typing import Callable

def chall(input:Callable[[str],None], print:Callable[[str],None]):
p = int(input("P = "))
if isPrime(p) and p.bit_length() >= 1024:
c, alice_pubKey, bob_pubKey = diffie_hellman(p, flag)
print("Alice's public key: {}".format(alice_pubKey))
print("Bob's public key: {}".format(bob_pubKey))
print("Ciphertext: {}".format(c))
else:
print("Invalid P")

nc连接

传入一个光滑p

1
178449493212694205742332078583256205058672290603652616240227340638730811945224947826121772642204629335108873832781921390308501763661154638696935732709724016546955977529088135995838497476350749621442719690722226913635772410880516639651363626821442456779009699333452616953193799328647446968707045304702547915799734431818800374360377292309248361548868909066895474518333089446581763425755389837072166970684877011663234978631869703859541876049132713490090720408351108387971577438951727337962368478059295446047962510687695047494480605473377173021467764495541590394732685140829152761532035790187269724703444386838656193674253139

得到

1
2
3
4
P = 178449493212694205742332078583256205058672290603652616240227340638730811945224947826121772642204629335108873832781921390308501763661154638696935732709724016546955977529088135995838497476350749621442719690722226913635772410880516639651363626821442456779009699333452616953193799328647446968707045304702547915799734431818800374360377292309248361548868909066895474518333089446581763425755389837072166970684877011663234978631869703859541876049132713490090720408351108387971577438951727337962368478059295446047962510687695047494480605473377173021467764495541590394732685140829152761532035790187269724703444386838656193674253139
Alice's public key: 125675470207464524603222514107125523551328873534613212269140981596785694924526430866957222959397564743457025446223101196426450254406610897107252964133306636110671993936211236013817349674784976626993468021179802160446655841087930211161069875088306810246202215636892485370977584413221938459244764602465449361938998231685990837890326832624406893372243826069351727528960411565197865218107739756463595065999899358545994395845951225456005694360944534332522393142256264174595564956018078456783150466892010160833779068200554943438188813971724149917494377166765615243959976592175580503636618924453086201351818899983192094763574946
Bob's public key: 76801137074263984808549750725291476719067689968386370746692317124469247391823359891063158956045844794718876318659784822466096630308301913374234262344682892519011302499491398706070851132855965967936039542119469469268519014013520036693823651644658245447575203375661820968449899841146921868717597100937436953835186102625593463057864623127533028001588710669857775995687328363132152855124571949796131611704928763670320796808993403342483870582205752243650439147750831020218015729908850733296146479218897241073952603413874868792744655925769891121340548811764506363050426153735804218292755241242642947034953357391470538370512069
Ciphertext: 71379744359338949947937671230275173912225990343925633290748684503700506921703686413051133543322265573365987420470743960886941121743862062476159170530508811728910957054262867058237247504737799747650358871786547044633068300303911964225687799060554548204570503936160025055678740003627702691664080826159364573000629976486654162280186424626656720373222988785689486866111943730320556386987184269249444364830544101384342696134114656574727755701256562437954556533740065206733257753032312041242746692641342828434051589539599955227941883110641590161704868691937284088568501215468219851628068308883744343594546468024742905943210872

exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#sage
import gmpy2
from Crypto.Util.number import *

# 构造一个很光滑的p,即p可以分解成许多小素数之积
p = 1
i = 2
while isPrime(p+1) ==False or p.bit_length()<1024 :
p *= i
i = gmpy2.next_prime(i)

#print(p+1)

g = 7
p = 178449493212694205742332078583256205058672290603652616240227340638730811945224947826121772642204629335108873832781921390308501763661154638696935732709724016546955977529088135995838497476350749621442719690722226913635772410880516639651363626821442456779009699333452616953193799328647446968707045304702547915799734431818800374360377292309248361548868909066895474518333089446581763425755389837072166970684877011663234978631869703859541876049132713490090720408351108387971577438951727337962368478059295446047962510687695047494480605473377173021467764495541590394732685140829152761532035790187269724703444386838656193674253139
A = 125675470207464524603222514107125523551328873534613212269140981596785694924526430866957222959397564743457025446223101196426450254406610897107252964133306636110671993936211236013817349674784976626993468021179802160446655841087930211161069875088306810246202215636892485370977584413221938459244764602465449361938998231685990837890326832624406893372243826069351727528960411565197865218107739756463595065999899358545994395845951225456005694360944534332522393142256264174595564956018078456783150466892010160833779068200554943438188813971724149917494377166765615243959976592175580503636618924453086201351818899983192094763574946
B = 76801137074263984808549750725291476719067689968386370746692317124469247391823359891063158956045844794718876318659784822466096630308301913374234262344682892519011302499491398706070851132855965967936039542119469469268519014013520036693823651644658245447575203375661820968449899841146921868717597100937436953835186102625593463057864623127533028001588710669857775995687328363132152855124571949796131611704928763670320796808993403342483870582205752243650439147750831020218015729908850733296146479218897241073952603413874868792744655925769891121340548811764506363050426153735804218292755241242642947034953357391470538370512069
c = 71379744359338949947937671230275173912225990343925633290748684503700506921703686413051133543322265573365987420470743960886941121743862062476159170530508811728910957054262867058237247504737799747650358871786547044633068300303911964225687799060554548204570503936160025055678740003627702691664080826159364573000629976486654162280186424626656720373222988785689486866111943730320556386987184269249444364830544101384342696134114656574727755701256562437954556533740065206733257753032312041242746692641342828434051589539599955227941883110641590161704868691937284088568501215468219851628068308883744343594546468024742905943210872

a = discrete_log(mod(A,p),mod(g,p))

b = discrete_log(mod(B,p),mod(g,p))

superkey = pow(B, a, p)

p = gmpy2.mpz(p)
superkey = gmpy2.mpz(superkey)

d = gmpy2.invert(superkey,p) % p
m = c*d % p
print(long_to_bytes(int(m)))

运行得到

最后flag为

1
moectf{diffie_he11man_key_exChange_is_not_so_hard_2WPIBung92WPIBung9?WP}

broken_hash

题目描述:

1
你这hash,保熟吗

附件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
def F(x, y, z):
return ((x & ~y) ^ (y & ~z) ^ (z & ~x)) ^ (
((x + y) * (y + z) + (x + z)) & 0xFFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF
)


def _block_hash(a, b, c, d):
x, y, z, w = F(a, b, c), F(b, c, d), F(c, d, a), F(d, a, b)
return (a ^ b ^ c ^ d ^ x ^ y ^ z ^ w) ^ 0xFFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF


def _hash(blocks: list[int]):
length = len(blocks)
if length % 4 != 0:
padding = 4 - length % 4
blocks += [0] * padding
length += padding
if length == 4:
return _block_hash(*blocks)
else:
block_size = length // 4
h1 = _hash(blocks[:block_size])
h2 = _hash(blocks[block_size : block_size * 2])
h3 = _hash(blocks[block_size * 2 : block_size * 3])
h4 = _hash(blocks[block_size * 3 :])
return _block_hash(h1, h2, h3, h4)


def bytes2blocks(data: bytes, block_size=16):
if len(data) % block_size != 0:
data += b"\x00" * (block_size - len(data) % block_size)
return [
int.from_bytes(data[i : i + block_size], "little")
for i in range(0, len(data), block_size)
]


def hash(*data: list[bytes]):
return _hash(bytes2blocks(b"".join(data)))


from typing import Callable
from random import randbytes
from base64 import b64decode,b64encode
from hashlib import md5
from string import ascii_letters
from random import choices

with open("flag.txt", "r") as f:
flag = f.read().strip()

def chall(input: Callable[[str], None], print: Callable[[str], None]):
def proof_of_work():

s = "".join(choices(ascii_letters, k=16))
h = md5(s.encode()).hexdigest()
print(f"<!> md5(XXXXXXXX+{s[8:]}) == {h}")
i = input("Give me XXXXXXXX: ")
return md5((i + s[8:]).encode()).hexdigest() == h
if not proof_of_work():
print("<!> ACCESS DENIED <!>")
return

b = randbytes(256)
print(f"this is a random bytes: {b64encode(b).decode()}")
i = input("give me another bytes with the same hash: ")
try:
d = b64decode(i)
except:
print("invaild input")
if hash(b) == hash(d) and d!=b:
print(f"congurations! and your flag is {flag}")

exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from pwn import *
from base64 import *
from hashlib import md5

io = remote('192.168.0.115',8416)
context.log_level = 'debug'

io.recvuntil(b'md5(XXXX+')
tail = io.recvuntil(b') == ', drop = True)
hash = io.recvline().strip().decode()

#proof
found = iters.bruteforce(lambda x: md5(x.encode() + tail).hexdigest() == hash, string.ascii_letters, 4)
io.sendlineafter(b": ", found.encode())

io.recvuntil(b"this is a random bytes: ")
b = b64decode(io.recvline().strip())

a = b[16:64] + b[:16] + b[64:]
a64 = b64encode(a)

io.sendlineafter("give me another bytes with the same hash: ", a64)

print(io.recvline())
io.interactive()

运行得到

最后flag为

1
moectf{a_hash_FUNCtioN_With_sYMMEtRY_is_vERY_vUlNERa6lE_3iiA0JiuP0DxuuP}

factorize_me

题目描述:

1
can you factorize me?

附件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from Crypto.Util.number import getPrime
from math import prod
from sympy import nextprime
from random import choices

with open('flag.txt', 'rb') as fs:
flag = fs.read().strip()

primes = [getPrime(512) for _ in range(9)]
print(f"{prod(primes) = }")
print(f"{prod(p - 1 for p in primes) = }")

primes2 = [nextprime(p) for p in choices(primes, k=3)]
n = prod(primes2)
e = 65537
c = pow(int.from_bytes(flag, 'big'), e, n)

print(f'n = {n}')
print(f'e = {e}')
print(f'c = {c}')

# 363364907814244019888662301376841344262476227242899756862391470731421569394957444030214887114615748277199649349781524749919652160244484352285668794188836866602305788131186220057989320357344904731322223310531945208433910803617954798258382169132907508787682006064930747033681966462568715421005454243255297306718356766130469885581576362173340673516476386201173298433892314145854649884922769732583885904512624543994675379894718657682146178638074984373206937523380103438050549181568015985546172618830480078894445808092527561363650503540062128543705172678754195578429520889784813733491180748361345720247750720179608752244490362713103319685024237941527268458213442611663415417005556439749055222361212059968254748751273361732365487788593341859760309778894350385339764442343374673786357175846291309425081492959910254127778240522152676060766139057453197528944251599979227271074508795482632471242983094008619339488744362509349734218480932255216087706001484182136783834973304870508270118505737767002256270427907341952256516206663258530300791364944105025764611810001781971638030661367630116818647252727909489405550104641122269772492252464714694507693447974171377200402508765841829763548525530878309985480248379655169722567051495205792089930014228403456098065971372039443284193603395249634283366194562380309469628114581468645669390610963076340643757972439104287127375438663839421605531570285615180251
# 363364907814244019888662301376841344262476227242899756862391470731421569394957444030214887114615748277199649349781524749919652160244484352285668794188836492373364350673588273863828369502073826782362255108313852264064760467561392054178047091483873483255491431451728274259516789065331176728192953741805933100379191778599394515981288225535175013258094287912195847642598436035132783919453991516358280321085873745330313812205910011387125778714795906023110368957596998222544234082487264006696812862179916726781327290284827659294751262185328816323311831349296593013038823107653943652771448719760448938995150646738377177532550757319539185878535087009904848382493668686831331474113789651777885239747000076063679062106375348803749466079052774597412239427050432901553466002731972993029311850718200685157193170716432600165476733200831046297530470544781309612128231925681374239849452623513538498417735984094919756374577623486416462101457492789215144166273775249387638107644634704270216130852885082174564648445147377239033930079759024399532146184753110240154062693457622208373371290126810856885343328090305620627668495081760346853701632815149478447405718664667978825807101325764916405446176183238866136433205933785973568759281210319422288153910340542098573782006262190181726245838857185687242960093445000287347616796984610291664809895901301187179157382169999966124177588884152267266994164841066291200
# n = 899081756851564072995842371038848265712822308942406479625157544735473115850983700580364485532298999127834142923262920189902691972009898741820291331257478170998867183390650298055916005944577877856728843264502218692432679062445730259562784479410120575777748292393321588239071577384218317338474855507210816917917699500763270490789679076190405915250953860114858086078092945282693720016414837231157788381144668395364877545151382171251673050910143023561541226464220441
# e = 65537
# c = 841335863342518623856757469220437045493934999201203757845757404101093751603513457430254875658199946020695655428637035628085973393246970440054477600379027466651143466332405520374224855994531411584946074861018245519106776529260649700756908093025092104292223745612991818151040610497258923925952531383407297026038305824754456660932812929344928080812670596607694776017112795053283695891798940700646874515366341575417161087304105309794441077774052357656529143940010140

exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
from Crypto.Util.number import *
from gmpy2 import *

# Given values
P = 363364907814244019888662301376841344262476227242899756862391470731421569394957444030214887114615748277199649349781524749919652160244484352285668794188836866602305788131186220057989320357344904731322223310531945208433910803617954798258382169132907508787682006064930747033681966462568715421005454243255297306718356766130469885581576362173340673516476386201173298433892314145854649884922769732583885904512624543994675379894718657682146178638074984373206937523380103438050549181568015985546172618830480078894445808092527561363650503540062128543705172678754195578429520889784813733491180748361345720247750720179608752244490362713103319685024237941527268458213442611663415417005556439749055222361212059968254748751273361732365487788593341859760309778894350385339764442343374673786357175846291309425081492959910254127778240522152676060766139057453197528944251599979227271074508795482632471242983094008619339488744362509349734218480932255216087706001484182136783834973304870508270118505737767002256270427907341952256516206663258530300791364944105025764611810001781971638030661367630116818647252727909489405550104641122269772492252464714694507693447974171377200402508765841829763548525530878309985480248379655169722567051495205792089930014228403456098065971372039443284193603395249634283366194562380309469628114581468645669390610963076340643757972439104287127375438663839421605531570285615180251
phi_P = 363364907814244019888662301376841344262476227242899756862391470731421569394957444030214887114615748277199649349781524749919652160244484352285668794188836492373364350673588273863828369502073826782362255108313852264064760467561392054178047091483873483255491431451728274259516789065331176728192953741805933100379191778599394515981288225535175013258094287912195847642598436035132783919453991516358280321085873745330313812205910011387125778714795906023110368957596998222544234082487264006696812862179916726781327290284827659294751262185328816323311831349296593013038823107653943652771448719760448938995150646738377177532550757319539185878535087009904848382493668686831331474113789651777885239747000076063679062106375348803749466079052774597412239427050432901553466002731972993029311850718200685157193170716432600165476733200831046297530470544781309612128231925681374239849452623513538498417735984094919756374577623486416462101457492789215144166273775249387638107644634704270216130852885082174564648445147377239033930079759024399532146184753110240154062693457622208373371290126810856885343328090305620627668495081760346853701632815149478447405718664667978825807101325764916405446176183238866136433205933785973568759281210319422288153910340542098573782006262190181726245838857185687242960093445000287347616796984610291664809895901301187179157382169999966124177588884152267266994164841066291200
n = 899081756851564072995842371038848265712822308942406479625157544735473115850983700580364485532298999127834142923262920189902691972009898741820291331257478170998867183390650298055916005944577877856728843264502218692432679062445730259562784479410120575777748292393321588239071577384218317338474855507210816917917699500763270490789679076190405915250953860114858086078092945282693720016414837231157788381144668395364877545151382171251673050910143023561541226464220441
e = 65537
c = 841335863342518623856757469220437045493934999201203757845757404101093751603513457430254875658199946020695655428637035628085973393246970440054477600379027466651143466332405520374224855994531411584946074861018245519106776529260649700756908093025092104292223745612991818151040610497258923925952531383407297026038305824754456660932812929344928080812670596607694776017112795053283695891798940700646874515366341575417161087304105309794441077774052357656529143940010140


def factorize_multi_prime(N, phi):
prime_factors = set()
factors = [N]
while factors:
N_val = factors[0]
w = randrange(2, N_val - 1)
i = 1
while phi % (2 ** i) == 0:
sqrt_1 = pow(w, phi // (2 ** i), N_val)
if sqrt_1 > 1 and sqrt_1 != N_val - 1:
factors.pop(0)
p_val = gcd(N_val, sqrt_1 + 1)
q_val = N_val // p_val
if is_prime(p_val):
prime_factors.add(p_val)
elif p_val > 1:
factors.append(p_val)
if is_prime(q_val):
prime_factors.add(q_val)
elif q_val > 1:
factors.append(q_val)
break
i += 1
return list(prime_factors)


primes_list = factorize_multi_prime(P, phi_P)


factors_of_n = []
temp_n = n
for t in primes_list:
for i in range(1, 5000):
x = t + i
g = gcd(x, temp_n)
if g > 1:
factors_of_n.append(x)
temp_n //= g
break
if len(factors_of_n) == 3:
break


p1, p2, p3 = factors_of_n
phi_n = (p1-1)*(p2-1)*(p3-1)
d = pow(e, -1, phi_n)
m = pow(c, d, n)
flag = long_to_bytes(m).decode()
print(flag)

运行得到

最后flag为

1
moectf{you_KNow_how_to_faCtorize_N_right?_9?WPIBung6?WPIBung6?WPIBund6?}

bad_random

题目描述:

1
你能猜出这个随机数生成器生成的下一个数吗?

附件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import random

with open("flag.txt", "r") as f:
flag = f.read().strip()


class LCG:
def set_params(self):
self.m = random.randint(10000, 20000)
self.a = random.randint(10000, 20000)
self.c = random.randint(1, self.a-1)
self.x = random.randint(0, self.m-1)

def get_all_output(self):
x0 = self.x
s = set()
while (t := self()) not in s:
s.add(t)
self.x = x0
return s

def __init__(self):
self.set_params()
while len(self.get_all_output()) < 10:
self.set_params()

def __call__(self):
self.x = (self.a * self.x + self.c) % self.m
return self.x

from typing import Callable

def chall(input:Callable[[str],None], print:Callable[[str],None]):
from hashlib import md5
from string import ascii_letters
s = "".join(random.choices(ascii_letters, k=16))
h = md5(s.encode()).hexdigest()
print(f"<!> md5(XXXXXXXX+{s[8:]}) == {h}")
i = input("Give me XXXXXXXX: ")
if md5((i + s[8:]).encode()).hexdigest() != h:
print("<!> ACCESS DENIED <!>")
return
inst = LCG()
print("Let's play a simple game! If you can guess the right number, I will give your the flag! You have 10 tries")
for tries in range(10):
i = input(f"Give me a number, you have failed for {tries} times: ")
if int(i) == (right := inst()):
print(f"Congurations! You win the game! Your flag is here: {flag}")
else:
print(f"Oh, you are wrong! The right number is {right}")

伪随机数发生器

exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
from pwn import *
from hashlib import md5
from Crypto.Util.number import *
from string import ascii_letters
import random


sh = remote('192.168.0.115', 11261)

table = string.ascii_letters

def proof_of_work(s, tsha):
for i in table:
for j in table:
for k in table:
for l in table:
proof = i + j + k + l + s
if(md5(proof.encode()).hexdigest() == tsha):
sh.sendline((i + j + k + l).encode())
return

pres = sh.recvuntil(b'md5(XXXX+', drop = True)
s = sh.recvuntil(b') == ', drop = True).decode()
tsha = sh.recvuntil(b'\n', drop = True).decode()

proof_of_work(s, tsha)

S = []

for _ in range(8):
guess = str(random.randint(0, 20000))
sh.sendline(guess)
clean = sh.recvuntil(b'is ', drop = True)
response = sh.recvuntil(b'\n', drop= True)
S.append(int(response))
print(S)

T1 = S[1] - S[0]
T2 = S[3] - S[2]
T3 = S[5] - S[4]
T4 = S[7] - S[6]
A1 = T1*T3 - T2**2
A2 = T2*T4 - T3**2
m1 = GCD(A1, A2)
a = ((S[2] - S[1])*inverse((S[1] - S[0]), m1)) % m1
b = (S[1] - a*S[0]) % m1
assert ((a*S[6] + b) % m1) == S[7]
sh.sendline(str((a*S[7] + b) % m1))
sh.interactive()
#moectf{u5e_5ingle_lcg_a5_a_RanDoM_nuMbeR_geneRaToR_i5_noT_a_gooD_iDea!_}

feistel

题目描述:

1
很喜欢shallow的一句话:白给捏

附件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from Crypto.Util.number import *

round = 2
flag = open("./secret", "rb").read().strip()


def f(m, key):
m = m ^ (m >> 4)
m = m ^ (m << 5)
m = m ^ (m >> 8)
m ^= key
m = (m * 1145 + 14) % 2**64
m = (m * 1919 + 810) % 2**64
m = (m * key) % 2**64
return m


def enc(m, key, round):
key = bytes_to_long(key)
left = bytes_to_long(m[:8])
right = bytes_to_long(m[8:])
for i in range(round):
left, right = right, f(right, key) ^ left
left, right = right, left
return long_to_bytes(left).rjust(8, b"\x00") + long_to_bytes(right).rjust(8, b"\x00")


def padding(m):
mlen = len(m)
pad = 16 - mlen % 16
return m + pad * bytes([pad])


def ecb_enc(m, key):
m = padding(m)
mlen = len(m)
c = b""
for i in range(mlen // 16):
c += enc(m[i * 16 : i * 16 + 16], key, round)
return c


print(ecb_enc(flag, b"wulidego"))

# b'\x0b\xa7\xc6J\xf6\x80T\xc6\xfbq\xaa\xd8\xcc\x95\xad[\x1e\'W5\xce\x92Y\xd3\xa0\x1fL\xe8\xe1"^\xad'

exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

from Crypto.Util.number import *
round = 2
cipher = b'\x0b\xa7\xc6J\xf6\x80T\xc6\xfbq\xaa\xd8\xcc\x95\xad[\x1e\'W5\xce\x92Y\xd3\xa0\x1fL\xe8\xe1"^\xad'
def f(m, key):
m = m ^ (m >> 4)
m = m ^ (m << 5)
m = m ^ (m >> 8)
m ^= key
m = (m * 1145 + 14) % 2**64
m = (m * 1919 + 810) % 2**64
m = (m * key) % 2**64
return m

def enc(m, key, round):
key = bytes_to_long(key)
left = bytes_to_long(m[:8])
right = bytes_to_long(m[8:])
for i in range(round):
left, right = right, f(right, key) ^ left
left, right = right, left
return long_to_bytes(left).rjust(8, b"\x00") + long_to_bytes(right).rjust(8, b"\x00")

def padding(m):
mlen = len(m)
pad = 16 - mlen % 16
return m + pad * bytes([pad])

def ecb_enc(m, key):
m = padding(m)
mlen = len(m)
c = b""
for i in range(mlen // 16):
c += enc(m[i * 16 : i * 16 + 16], key, round)
return c

print(ecb_enc(cipher, b"wulidego"))

运行得到

最后flag为

1
moectf{M@g1cA1_Encr1tion!!!}

feistel_promax

题目描述:

1
很喜欢shallow的一句话:会python,上过小学,就能做

附件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
from Crypto.Util.number import *
from os import urandom

round = 2
flag = open("./secret", "rb").read().strip()


def f(m, key):
m = m ^ (m >> 4)
m = m ^ (m << 5)
m = m ^ (m >> 8)
m ^= key
m = (m * 1145 + 14) % 2**64
m = (m * 1919 + 810) % 2**64
m = (m * key) % 2**64
return m


def enc(m, key, round):
key = bytes_to_long(key)
left = bytes_to_long(m[:8])
right = bytes_to_long(m[8:])
for i in range(round):
left, right = right, f(right, key) ^ left
left, right = right, left
return long_to_bytes(left).rjust(8, b"\x00") + long_to_bytes(right).rjust(8, b"\x00")


def padding(m):
mlen = len(m)
pad = 16 - mlen % 16
return m + pad * bytes([pad])


def ecb_enc(m, key):
m = padding(m)
mlen = len(m)
c = b""
for i in range(mlen // 16):
c += enc(m[i * 16 : i * 16 + 16], key, round)
return c


key = urandom(8)

print(ecb_enc(padding(flag), key))
# b'B\xf5\xd8gy\x0f\xaf\xc7\xdf\xabn9\xbb\xd0\xe3\x1e0\x9eR\xa9\x1c\xb7\xad\xe5H\x8cC\x07\xd5w9Ms\x03\x06\xec\xb4\x8d\x80\xcb}\xa9\x8a\xcc\xd1W\x82[\xd3\xdc\xb4\x83P\xda5\xac\x9e\xb0)\x98R\x1c\xb3h'

exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
from Crypto.Util.number import *

def f(m, key):
m = m ^ (m >> 4)
m = m ^ (m << 5)
m = m ^ (m >> 8)
m ^= key
m = (m * 1145 + 14) % 2**64
m = (m * 1919 + 810) % 2**64
m = (m * key) % 2**64
return m

def dec(c,key):
key = bytes_to_long(key)
left = bytes_to_long(c[:8])
right = bytes_to_long(c[8:])
m_right = f(right,key) ^ left
m_left = f(m_right,key) ^ right
return long_to_bytes(m_left) + long_to_bytes(m_right)


def ecb_dec(c, key):
clen = len(c)
m = b""
for i in range(clen // 16):
m += dec(c[i * 16 : i * 16 + 16], key)
return m

m = b'\x10\x10\x10\x10\x10\x10\x10\x10'
ct = b'B\xf5\xd8gy\x0f\xaf\xc7\xdf\xabn9\xbb\xd0\xe3\x1e0\x9eR\xa9\x1c\xb7\xad\xe5H\x8cC\x07\xd5w9Ms\x03\x06\xec\xb4\x8d\x80\xcb}\xa9\x8a\xcc\xd1W\x82[\xd3\xdc\xb4\x83P\xda5\xac\x9e\xb0)\x98R\x1c\xb3h'
c = bytes_to_long(ct[-8:]) ^ bytes_to_long(m)
bin_c = bin(c)[2:].rjust(64,'0')


k1 = [b'']
for i in range(1,5):
k2 = []
for KEY in k1:
for j in range(2**16):
key1 = long_to_bytes(j) + KEY
cc = f(bytes_to_long(m),bytes_to_long(key1))
bin_cc = bin(cc)[2:].rjust(64,'0')
if bin_cc[-16*i:] == bin_c[-16*i:]:
k2.append(key1)
k1 = k2
# print(k2)

key = [b'4t*zFD\xac\xb4', b'\xb4t*zFD\xac\xb4', b'\\q\x0f\x00w\xeb\xc1"', b'\xdcq\x0f\x00w\xeb\xc1"']
for KEY in key:
flag = ecb_dec(ct,KEY)
print(flag)

运行得到

最后flag为

1
moectf{F_func_1s_n1t_Ve5y_$EcU%e}

文章作者: yiqing
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 yiqing !
  目录