2021-09-20

streamgame2

from flag import flag
assert flag.startswith("flag{")
assert flag.endswith("}")
assert len(flag)==27

def lfsr(R,mask):
    output = (R << 1) & 0xffffff
    i=(R&mask)&0xffffff
    lastbit=0
    while i!=0:
        lastbit^=(i&1)
        i=i>>1
    output^=lastbit
    return (output,lastbit)



R=int(flag[5:-1],2)
mask=0x100002

f=open("key","ab")
for i in range(12):
    tmp=0
    for j in range(8):
        (R,out)=lfsr(R,mask)
        tmp=(tmp << 1)^out
    f.write(chr(tmp))
f.close()

在这里插入图片描述
又是LFSR

ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

wtc_rsa_bbq

用rar打开得到
在这里插入图片描述
明显的RSA

先公钥解析,得到n、e,然后分解n得到p、q,最后解RSA

import Crypto.PublicKey.RSA as RSA
key = RSA.importKey('''-----BEGIN PUBLIC KEY-----
MIIEUzANBgkqhkiG9w0BAQEFAAOCBEAAMIIEOwKCBDIGLT1hySRSYwFH6JZw






















//8CAwEAAQ==
-----END PUBLIC KEY-----''')
n = key.n
e = key.e
#print (f'n={n}')
#print (f'e={e}')

import gmpy2
from Crypto.Util.number import  *

p=2^4244*699549860111847-1
q=2^4244*699549860111847+1

c = bytes_to_long(open('cipher.bin','rb').read())

phi = (q-1) * (p-1)
d = gmpy2.invert(e,phi)
m = gmpy2.powmod(c,d,n)
print(m)
print(long_to_bytes(m))

但是运行得到的是
在这里插入图片描述
猜测时储存时大小端问题,将最后两行代码改为

print(int(m).to_bytes(10,byteorder='little',signed=False).decode())

但是显示错误:OverflowError: int too big to convert

搜了其他师傅的解题方法,发现他们大都是用工具解的,

python3 RsaCtfTool.py --publickey ~/Desktop/key.pem --uncipherfile ~/Desktop/cipher.bin

就能得到一大串,flag在最后:flag{how_d0_you_7urn_this_0n?}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值