赛题下载链接: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(