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()
#encoding:utf-8 from Crypto.Util.number import bytes_to_long, long_to_bytes, getPrime import gmpy2, os from Crypto.Cipher import AES from flag import flag assert flag.startswith("DASCTF{") and flag.endswith("}") def padding(s, blocklen): length = (blocklen - len(s)) % blocklen return s + chr(length) * length key = os.urandom(16) iv = os.urandom(16) m = padding(flag, 16) c = AES.new(key, AES.MODE_CBC, iv).encrypt(m) print c.encode("hex") p = getPrime(512) q = getPrime(512) n = p * q e = 65537 m = bytes_to_long(key) c = pow(m, e, n) print hex(n).strip("L") print hex(c).strip("L") q = getPrime(512) n = p * q m = bytes_to_long(iv)