0x00 前言
CTF 加解密合集:CTF 加解密合集
0x01 题目
assert(len(open('flag.txt', 'rb').read()) <= 50)
assert(str(int.from_bytes(open('flag.txt', 'rb').read(), byteorder='big') << 10000).endswith('1002773875431658367671665822006771085816631054109509173556585546508965236428620487083647585179992085437922318783218149808537210712780660412301729655917441546549321914516504576'))
0x02 Write Up
开始解题,这道题拆解,首先是得到末尾的175位
a%10^175即可。那么算法就是m*2^10000%10^175=c
,现在就是要求m的值。根据逆元的特性
bb’≡1(mod N)
公式两边同时乘以2^10000的逆元,我们这里简化为b
可以得到m*%10^175%10^175=c*b'
根据同余继续化简:
m=c*b'%10^175
那么就可以求解:
c=1002773875431658367671665822006771085816631054109509173556585546508965236428620487083647585179992085437922318783218149808537210712780660412301729655917441546549321914516504576
import gmpy2
mod=pow(5,175)
f=gmpy2.invert(pow(2,10000),mod)
from Crypto.Util.number import *
m=c*f%mod
print(long_to_bytes(m))
以上