[b01lers2020]dollar_lunch

[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)))

但这样是不是太简单了

果然,运行得到的都是乱码

在这里插入图片描述
把这些数据都串到一起再放到文件里
在这里插入图片描述

依旧是看不懂啊
我觉得还是大小端的问题
但是应该改哪呢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值