[Zer0pts2020]ROR

encrypt

import random
from secret import flag

ror = lambda x, l, b: (x >> l) | ((x & ((1<<l)-1)) << (b-l))

N = 1
for base in [2, 3, 7]:
    N *= pow(base, random.randint(123, 456))
e = random.randint(271828, 314159)

m = int.from_bytes(flag, byteorder='big')
assert m.bit_length() < N.bit_length()

for i in range(m.bit_length()):
    print(pow(ror(m, i, m.bit_length()), e, N))

decrypt

发现N是2的倍数,很简单就可以发现每次输出中me 的最后一位就是c的最后一位.,这样很轻易就可以将m给求出来了.

import gmpy2
flag=''
f=open('chall.txt','r').readlines()
li=[]
for i in f:
    li.append(int(i.strip('\n')))
#print(li)
for i in li:
    flag+=bin(i)[-1]
from Crypto.Util import number
print(number.long_to_bytes(eval('0b'+flag[::-1])))



#zer0pts{0h_1t_l34ks_th3_l34st_s1gn1f1c4nt_b1t}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值