[b01lers2020]dollar_lunch
题目
import sys
N = 22518213392401264818411278544481843914232432830458541414885458377878266793498750772354592395933629538430168704357367677366063506437840746114109698561818213653155337516332045907584538560207347457518815750143165409925001430273241092541136748646685328169745125245340633556971837060802857356695229674488893860374426117801802327059524160107136439418599365088385458686062313445632037797173490869675537943240896233769936787893899596578453468394750636934950285496609730610849908463004889068961426952923099134018106324063391090991215384284497435868352255958362702412123106399579166856780539143530223177815706341761329346665123
phi = 22518213392401264818411278544481843914232432830458541414885458377878266793498750772354592395933629538430168704357367677366063506437840746114109698561818213653155337516332045907584538560207347457518815750143165409925001430273241092541136748646685328169745125245340633556971837060802857356695229674488893860374125936771634231083724519781739692120840798867536892089959731316847037589936959996408416801992484839541189805041461052140389233753983174954128996839480404891785287303195083960639773803194332300000270420399549292186960561461628916388255677931409154971065184660947084539883190976066572465271852306890113256664720
e = 65537
def encrypt(m):
return pow(m, e, N)
with open("secret_data", "rb") as f:
data = f.read()
chunkSize = 250
Nchunks = (len(data) // chunkSize) + 1
chunks = [data[i*chunkSize:(i+1)*chunkSize] for i in range(Nchunks)]
for i,msg in enumerate(chunks):
m = int.from_bytes(msg, byteorder='big', signed=False)
c = encrypt(m)
fname = "secret" + ("000" + str(i))[-4:]
with open(fname, "wb") as f:
f.write(c.to_bytes(256, byteorder = 'big'))
还有一个gz结尾的压缩文件,打开又
里面的每一个用记事本打开都差不多是
解题
读程序发现,是将secret_data中的数据二进制读入,然后250个一组转为十进制,再用RSA加密,然后存入对应的secret文件中。
根据解压,我们直达secret共有1225个secret文件
然后写程序解密就行了
import gmpy2
from Crypto.Util.number import long_to_bytes
N = 22518213392401264818411278544481843914232432830458541414885458377878266793498750772354592395933629538430168704357367677366063506437840746114109698561818213653155337516332045907584538560207347457518815750143165409925001430273241092541136748646685328169745125245340633556971837060802857356695229674488893860374426117801802327059524160107136439418599365088385458686062313445632037797173490869675537943240896233769936787893899596578453468394750636934950285496609730610849908463004889068961426952923099134018106324063391090991215384284497435868352255958362702412123106399579166856780539143530223177815706341761329346665123
phi = 22518213392401264818411278544481843914232432830458541414885458377878266793498750772354592395933629538430168704357367677366063506437840746114109698561818213653155337516332045907584538560207347457518815750143165409925001430273241092541136748646685328169745125245340633556971837060802857356695229674488893860374125936771634231083724519781739692120840798867536892089959731316847037589936959996408416801992484839541189805041461052140389233753983174954128996839480404891785287303195083960639773803194332300000270420399549292186960561461628916388255677931409154971065184660947084539883190976066572465271852306890113256664720
e = 65537
d = int(gmpy2.invert(e,phi))
def decrypt(c):
return pow(c,d,N)
for i in range(1225):
fname = "secret" + ("000" + str(i))[-4:]
with open(fname, "rb") as f:
data = f.read()
c = int.from_bytes(data, byteorder='big', signed=False)
print(long_to_bytes(decrypt(c)))
但这样是不是太简单了
果然,运行得到的都是乱码
把这些数据都串到一起再放到文件里
依旧是看不懂啊
我觉得还是大小端的问题
但是应该改哪呢