with open('cycles.txt') as f:
code = f.read()
exec(code)
p = P
ct = ciphertext
for a in range(p-1, (p-1) * (2 ** 24), p-1):
if len(bin(a)) >= 1050:
break
from Cryptodome.Util.number import long_to_bytes
key = long_to_bytes(a)[:16]
from Cryptodome.Cipher import AES
cipher = AES.new(key, AES.MODE_ECB)
flag = cipher.decrypt(ct)
from Cryptodome.Util.Padding import unpad
try:
# 解密后去除填充
unpadded_flag = unpad(flag, AES.block_size)
# 如果没有抛出异常,表示填充有效,可以进行进一步处理
if unpadded_flag.startswith(b'byuctf{'):
print(unpadded_flag)
except ValueError:
# 填充无效,跳过该flag
continue
最后 try-except 那一段是 AI 写的。因为不会写 unpad 报错的代码。