#!/bin/env python3 from string import ascii_uppercase as UC from random import SystemRandom from enigma.machine import EnigmaMachine from secretstuff import FLAG, PLUGBOARD_SETTINGS assert FLAG.isupper() # Without pbcft{...} random = SystemRandom() for _ in range(50): ROTORS = [random.choice(("I","II","III","IV","V","VI","VII","VIII")) for _ in range(3)] REFLECTOR = random.choice(("B", "C", "B-Thin", "C-Thin")) RING_SETTINGS = [random.randrange(26) for _ in range(3)] machine = EnigmaMachine.from_key_sheet( rotors=ROTORS, reflector=REFLECTOR, ring_settings=RING_SETTINGS, plugboard_settings=PLUGBOARD_SETTINGS) machine.set_display(''.join(random.sample(UC, 3))) ciphertext = machine.process_text(FLAG) print(ciphertext)
enigmaによる文字cの変換を とかくと、必ずらしいというのを使う
from ptrlib import Socket from string import ascii_uppercase groups = [set() for _ in range(17)] for i in range(10): sock = Socket("ainissesthai.chal.perfect.blue", 1) for _ in range(50): cipher = sock.recvline().strip().decode() for group, c in zip(groups, cipher): group.add(c) flag = "" ans = set(ascii_uppercase) for group in groups: m = ans - group print(m) flag += m.pop() print(flag) #FATALFLAWINENIGMA