2024CTF中crypto方向ovo以及简单古典密码writeup

                                                       OVO

化简得

k = e // 2 - 2

两边同乘p

只有p未知,这个方程求解之后得到p的高位,用高位泄露的思路求解即可

from Crypto.Util.number import *

def partial_p(p0, n, bits):
    PR.<x> = PolynomialRing(Zmod(n))
    f = p0 + x
    f = f.monic()
    roots = f.small_roots(X=2^(bits+5), beta=0.3)
    if roots:
        x0 = roots[0]
        p = gcd(p0 + x0, n)
        return ZZ(p)


def find_p(eh, n, bits):
    PR.<x> = PolynomialRing(RealField(1000))
    f = (kk+rr)*x**2 + (rr*(n+1)+65538)*x + rr*n - eh*x
    results = f.roots()
    if results:
        for x in results:
            p_high = int(x[0]) >> 4 << 4
            p= partial_p(p_high, n,bits)
            if p and p != 1:
                return p

n = 
e = 
c = 

rr= e // n
kk = rr - 2
p= find_p(e, n, 200)
q= n // p
e = 65537 + kk * p + rr * ((p + 1) * (q + 1)) + 1
d1 = inverse(e,(p - 1) * (q - 1))
m1 = pow(c,int(d1),n)
print(long_to_bytes(int(m1)))

                                                               古典密码

1:首先由atbash cipher解密AnU7NnR4NassOGp3BDJgAGonMaJayTwrBqZ3ODMoMWxgMnFdNqtdMTM9得到:

ZmF7MmI4MzhhLTk3YWQtZTlmNzQzbGdiYjA3LWNlNDctNmUwMjgwNGN9

2:再用base64解密ZmF7MmI4MzhhLTk3YWQtZTlmNzQzbGdiYjA3LWNlNDctNmUwMjgwNGN9

得到:fa{2b838a-97ad-e9f743lgbb07-ce47-6e02804c}

3:用rail fence cipher encode 解密得到flag{b2bb0873-8cae-4977-a6de-0e298f0744c3}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值