-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsol.sage
29 lines (21 loc) · 1.91 KB
/
sol.sage
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
from Crypto.Util.number import *
m = 188386979036435484879965008114174264991
c = [139973581469094519216727575374900351861, 72611500524424820710132508411012420565, 140250284171774823110472025667980956543, 32777758636601391326104783245836052689, 93866424818360655182957373584240082579, 171863599957625964609271128026424910780, 79519361871833866309751703823833758895, 157560014678333843523667019607330519198, 124975940725420603096426178838171348774, 3564693226938115115868719960412136082, 171740395033004244209129576880703758137, 92351702560499873288607191820522016910, 150094682983991168941275074808189562445, 85216665671310516224623100332845098274, 16595528649897543867800038656511154165, 19125026372283368463438507438570762609, 176795229245184227193627490600890111381, 12405536363393343486876802251851443164, 21411546298976790262184367895329536928, 182888536880153351183725282563493758721, 138117470020493616013148815568927291737, 32287599436436170232396368906599005001, 163785640221676961026807618948041121515, 73960913430365454320029097511676942987, 15454719718422589834477927328058381231, 187548967342452768771256903662911504220, 159561161576243464490176365717896800999, 68751190791869748062871941359673493536, 121231243784105483671509398006895458898, 14881767206744163076100305953646446453, 175267890044871169868897060667629218625, 147751087332703693307658387948934053643, 144192171120888146499506968416035431150]
prefix = [ord(c) for c in "AKASEC{"]
'''
flag[0]*(a*s + b) == c[0]
flag[1]*(a*c[0] + b) == c[1]
flag[2]*(a*c[1] + b) == c[2]
a*c[0] + b == c[1] * inverse(flag[1], m)
a*c[1] + b == c[2] * inverse(flag[2], m)
a*(c[0] - c[1]) == ~~
'''
c1 = (c[1]*inverse(prefix[1], m)) % m
c2 = (c[2]*inverse(prefix[2], m)) % m
a = ((c1 - c2)*inverse(c[0] - c[1], m)) % m
b = (c1 - a*c[0]) % m
flag = ['A']
for i in range(1, len(c)):
flag.append(chr((c[i]*inverse(a*c[i-1] + b, m)) % m))
print(''.join(flag))
# AKASEC{++see_?!_just_some_math--}