definit(): r1 = getrandbits(64) r2 = getrandbits(32) m = "{:X}".format(r1).encode('utf-8') salt = "{:X}".format(r2).encode('utf-8') m += salt return add_to_16(m.decode())
if __name__=="__main__": flag='Stinger{***************************************}' f = open("msg.txt", 'w+') old_key = b'73E5602B54FE63A5' old_iv = b'B435AE462FBAA662' for i inrange(208): old_c = chall(old_key, old_iv) f.write("{}\n".format(old_c.decode())) salt = "{:X}".format(getrandbits(32)).encode('utf-8') m = flag.encode() + salt key = "{:X}".format(getrandbits(64)).encode('utf-8') iv = "{:X}".format(getrandbits(64)).encode('utf-8') c = encrypt(add_to_16(m.decode()), key, iv) print("c = %r"%(b2a_hex(c)))
# c = b'9847f103ed4dce08c5ab8cb22288a477df4ae2a96bf10ccecc94ba799e4e072372c401aed54925e2eeff47fe5c56be2c'
整体思路
看上去是道 AES 加密的题目,然而注意到它们都是由getrandbits()函数生成的,这是 random 库的一个随机数生成函数,使用的正是 MT19973 算法,所以只要我们预测出 iv、salt 和 key,这道题基本就做完了