第一题看起来很简单,就是我的电脑不够好,跑不出来…(其实是我没钱)
bd
题目给的e很大,低解密指数攻击得到d再把结果跑出来.
d=1485313191830359055093545745451584299495272920840463008756233
n=86966590627372918010571457840724456774194080910694231109811773050866217415975647358784246153710824794652840306389428729923771431340699346354646708396564203957270393882105042714920060055401541794748437242707186192941546185666953574082803056612193004258064074902605834799171191314001030749992715155125694272289
c=37625098109081701774571613785279343908814425141123915351527903477451570893536663171806089364574293449414561630485312247061686191366669404389142347972565020570877175992098033759403318443705791866939363061966538210758611679849037990315161035649389943256526167843576617469134413191950908582922902210791377220066
import gmpy2
from Crypto.Util import number
print(number.long_to_bytes(gmpy2.powmod(c,d,n)))
#flag{d3752538-90d0-c373-cfef-9247d3e16848}
lfsr
一道基础的lfsr题目,不过要注意是左移,利用矩阵来进行求解即可.
#sage
f = open('output.txt', 'r').read()
print(len(f))
# import Crypto.Until.number
N = 2 ** (101) - 1
def doit():
for i in range(101):
temp = []
ans=[[int(x)] for x in f[i:i+100]]
for j in range(0, 100):
ttt=[int(k) for k in f[j:j+i]]
ttt.reverse()
temp.append([0]*(100-i)+ttt)
#print(temp)
#print(len(temp))
#print(temp[0])
#print(temp[1])
A = matrix(Zmod(2), temp)
#print(A)
#print(A.rank())
if A.rank() !=100:
continue
print(i)
#print(A.inverse())
B = matrix(Zmod(2), ans)
mask = A.inverse() * B
li = [x[0] for x in mask]
flag = '0b'
for x in li:
flag += str(x)
print(flag)
化成10进制提交.
总结:
第一次参加比赛,misc做了一题,crypto做了两题. 比赛时间24小时,真的挺累的,还有就是crypto的题太少了,就3个题目,和别的类别比起来很透明… 最后排100多名,能进入分区赛挺开心的,感谢给力的队友!