guesses = { 7: [52, 54, 53, 43], 8: [149, 151, 150, 148], 9: [173, 174, 175, 172], 10: [83, 80, 81, 82], 13: [186, 184, 185, 187], 14: [2, 1, 0, 3], 15: [151, 149, 150, 148] } known_keybytes = bytes.fromhex("64c7072487f2") candidates = [list(known_keybytes)] for i in range(len(known_keybytes), 16): new_candidates = [] if i in guesses.keys(): for guess in guesses[i]: for candidate in candidates: new_candidates.append([c for c in candidate] + [guess]) else: for candidate in candidates: new_candidates.append([c for c in candidate] + [-1]) candidates = new_candidates print("Generated %d candidates" % len(candidates)) for candidate in candidates: rep = ''.join([hex(c)[2:].zfill(2) if c != -1 else '??' for c in candidate]) print(rep)