1. I still cannot understand how and why this work...can you elaborate on this please?
2. what do you mean by "At least I know that if you have the correct base key for the right bit flip?
thanks
Python code:
xor_masks = {
67: 0b1100111100000011110111001010001111100110101111010011111001010001,
66: 0b10111110011010001001010001011000011010100101000011100101000010001,
65: 0b101011111000111010011101100101011111010010011011001011110011000,
64: 0b100011111010111000001101100001001111011011101110110100101011,
63: 0b1100110001101000010000001001010011001100001001011111110111,
62: 0b100111000010101010111110000101001001111011100101010000010001,
61: 0b110000110110100101011100100010111101000010011011011011111001,
60: 0b111111100001011110011111011010110010011000010001000001,
59: 0b10110110100100110100010001111000001101010100101110110000,
58: 0b100111001100010100100011110101101111001110110010111011110,
57: 0b10100110110100011011011111000011010100010100111100011,
56: 0b1100010111001110100100111000101001110110000000000100000,
55: 0b10101010000011110000001100100100110000001111011101011,
54: 0b11100100100000100100100101010010100101110000010111100,
53: 0b111111110000111011100011011100000011100110110010011,
52: 0b1000001010001111010011011001101000110000111000011,
51: 0b101011111000111101011110010111111111011000101011,
50: 0b1110101000010101111000011110100010110110010101011,
49: 0b100010111110100010010100111111101010000010110010,
48: 0b10100100001100100101000001100011100010001100100,
47: 0b100110010100111101111010010101100001101000101,
46: 0b100010011111001111100011101110010101010111011,
45: 0b11011101000000110101111010111100001111111010,
44: 0b11111110101001100101001011100101001110000,
43: 0b10100001011000100110110000011101001101110,
42: 0b10101110111011110001110100111001001110000,
41: 0b1010110001111001011001010011001110100100,
40: 0b1011001010001101101101100110000101001,
39: 0b11010010100000011111001111110000010110,
38: 0b1110111000111110100000101001100101111,
37: 0b100010101000100010101001010101101100,
36: 0b11000100001011111011111010110000011,
35: 0b1101010001001011011110111010001111,
34: 0b10110101100110100110111011100010,
33: 0b1010110100100110101011100100111,
32: 0b1000111100111010101100111010001,
31: 0b10101100000001100010111000,
30: 0b10011010110011001010011011,
29: 0b1000000111011010101011100001,
28: 0b10011011101001001100010111,
27: 0b1010100111100011110001010,
26: 0b101111111100110110010001,
25: 0b1011010000100011010,
24: 0b1000111101010111111011,
23: 0b1010101001000110101101,
22: 0b100100001101111110000,
21: 0b1000101101011001011,
20: 0b101101001110101010,
19: 0b101000101101100000,
18: 0b1111011111110010,
17: 0b1000100110110000,
16: 0b11011011001001,
15: 0b1011100001100,
14: 0b1011011001111,
13: 0b101110011111,
12: 0b10110000100,
11: 0b1101111100,
10: 0b111111101,
9: 0b101100,
8: 0b11111,
7: 0b110011,
6: 0b1110,
5: 0b1010,
4: 0b111,
3: 0b0,
2: 0b0,
1: 0b0
}
def generate_private_keys():
print("Puzzle | Private Key")
print("-------------------")
for puzzle in range(1, 68):
if puzzle in xor_masks:
puzzle_end = 2**puzzle - 1
private_key = puzzle_end ^ xor_masks[puzzle]
print(f"{puzzle:6} | {private_key}")
else:
print(f"{puzzle:6} | (Missing XOR mask)")
generate_private_keys()
Is it clearer now? If not, then nothing.
