ByteCTF之密码题lrlr

本文介绍了ByteCTF中一道密码题的解决过程,涉及RSA广播攻击和AES解密。题目通过先进行generate_init_state函数处理,然后用24次不同模数的低指数RSA加密和48次AES加密来保护flag。解题关键在于利用random函数的伪随机性获取AES秘钥,并通过反复执行generate_init_state函数找到原始flag。
摘要由CSDN通过智能技术生成

赛题下载链接:lrlr
下面是这道题的python代码部分:

from Crypto.Util.number import getPrime, bytes_to_long, long_to_bytes
from Crypto.Cipher import AES
import random


class lrand:

    def __init__(self, seed):
        self.seed = seed
        self.states = self.gen_states()
        self.statespoint = 0
        self.stateselse = 24

    def generate_init_state(self):
        a = 0
        for i in bin(self.seed)[2:]:
            a = a << 1
            if (int(i)):
                a = a ^ self.seed
            if a >> 256:
                a = a ^ 0x10000000000000000000000000000000000000000000000000000000000000223L
        return a

    def gen_states(self):
        init_state = self.generate_init_state()
        e = 17
        clist = []
        nlist = []
        for i in range(24):
            p = getPrime(512)
            q = getPrime(512)
            n = p * q
            c = pow(init_state, e, p * q)
            nlist.append(n)
            clist.append(c)
        f = open("cl", "wb")
        for i in nlist:
            f.write(hex(i) + "\n")
        return clist

    def stateconvert(self, state):
        key = long_to_bytes(random.getrandbits(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值