예제 #1
0
    def __init__(self):
        # Create all rotors used in a M3 Enigma machine
        self.r1 = Rotor(1, [letter for letter in "EKMFLGDQVZNTOWYHXUSPAIBRCJ"],
                        ["Q"])
        self.r2 = Rotor(2, [letter for letter in "AJDKSIRUXBLHWTMCQGZNPYFVOE"],
                        ["E"])
        self.r3 = Rotor(3, [letter for letter in "BDFHJLCPRTXVZNYEIWGAKMUSQO"],
                        ["V"])
        # Store rotors in number mapped dictionary
        self.r_table = {1: self.r1, 2: self.r2, 3: self.r3}

        # plugboard
        self.plugboard = []

        # Initialize rotor sockets
        self.sockets = {1: self.r1, 2: self.r2, 3: self.r3}

        # Create reflectors
        self.reflectors_available = {
            "UKW-B":
            Reflector("UKW-B",
                      [letter for letter in "YRUHQSLDPXNGOKMIEBFZCWVJAT"]),
            "UKW-C":
            Reflector("UKW-C",
                      [letter for letter in "FVPJIAOYEDRZXWGCTKUQSBNMHL"])
        }

        self.reflector = self.reflectors_available["UKW-B"]

        self.alphabet_map = [letter for letter in "ABCDEFGHIJKLMNOPQRSTUVWXYZ"]
예제 #2
0
파일: main.py 프로젝트: sharanya405/enigma
def main():
    UPPER_STRING = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    testAlphabet = Alphabet(UPPER_STRING)
    permutation1 = Permutation(
        "(AELTPHQXRU) (BKNW) (CMOY) (DFG) (IV) (JZ) (S)", testAlphabet)
    permutation2 = Permutation(
        "(FIXVYOMW) (CDKLHUP) (ESZ) (BJ) (GR) (NT) (A) (Q)", testAlphabet)
    permutation3 = Permutation("(ABDHPEJT) (CFLVMZOYQIRWUKXSG) (N)",
                               testAlphabet)
    permutation4 = Permutation("(AEPLIYWCOXMRFZBSTGJQNH) (DV) (KU)",
                               testAlphabet)
    permutation5 = Permutation(
        "(AE) (BN) (CK) (DQ) (FU) (GY) (HW) (IJ) (LO) (MP) (RX) (SZ) (TV)",
        testAlphabet)

    rotor1 = Rotor("I", permutation1, "TG")
    rotor2 = Rotor("II", permutation2, "A")
    rotor3 = Rotor("III", permutation3, "B")
    rotor4 = Rotor("IV", permutation4, "XO")
    reflector = Reflector("A", permutation5)

    rotors = [reflector, rotor4, rotor3, rotor2, rotor1]

    machine = Machine(testAlphabet, 5, 6, rotors)
    machine.insertRotors(["A", "IV", "III", "II", "I"])
    machine.setRotors("AAAA")

    message = input("What to convert:")
    print(machine.convertMsg(message))
예제 #3
0
 def __init__(self):
     """
     sets the initial machine with reflector, default rotors and default plugboard.
     """
     self.__reflector = Reflector()
     self.plugboard = Plugboard()
     self.rotors = Rotors()
예제 #4
0
    def __init__(self):
        # Create all rotors used in a M3 Enigma machine
        self.r1 = Rotor("I",
                        [letter for letter in "EKMFLGDQVZNTOWYHXUSPAIBRCJ"],
                        ["Q"])
        self.r2 = Rotor("II",
                        [letter for letter in "AJDKSIRUXBLHWTMCQGZNPYFVOE"],
                        ["E"])
        self.r3 = Rotor("III",
                        [letter for letter in "BDFHJLCPRTXVZNYEIWGAKMUSQO"],
                        ["V"])
        self.r4 = Rotor("IV",
                        [letter for letter in "ESOVPZJAYQUIRHXLNFTGKDCMWB"],
                        ["J"])
        self.r5 = Rotor("V",
                        [letter for letter in "VZBRGITYUPSDNHLXAWMJQOFECK"],
                        ["Z"])
        # Store rotors in number mapped dictionary
        self.r_table = {
            1: self.r1,
            2: self.r2,
            3: self.r3,
            4: self.r4,
            5: self.r5
        }

        # plugboard
        self.plugboard = []

        # Initialize rotor sockets
        self.sockets = {1: self.r1, 2: self.r2, 3: self.r3}

        # Create reflectors
        self.reflectors_available = {
            "UKW-B":
            Reflector("UKW-B",
                      [letter for letter in "YRUHQSLDPXNGOKMIEBFZCWVJAT"]),
            "UKW-C":
            Reflector("UKW-C",
                      [letter for letter in "FVPJIAOYEDRZXWGCTKUQSBNMHL"])
        }

        self.reflector = self.reflectors_available["UKW-B"]

        self.a = [letter for letter in "ABCDEFGHIJKLMNOPQRSTUVWXYZ"]
예제 #5
0
def main():
    f = input("Введите имя файла: ")
    try:
        file = open(f, "rb")
    except IndexError:
        print("Wrong file")
        return

    rotors = []
    for _ in range(ROTORS_COUNT):
        rotors.append(Rotor())

    enigma = Enigma(rotors, Reflector())

    print(enigma)

    enc_file_name = "enc_" + f
    dec_file_name = "dec_" + f
    enc_file = open(enc_file_name, "wb")

    print("Start encrypting '{0}' ...".format(f))
    while True:
        buf = file.read(MAX_LEN)
        if (not len(buf)):
            file.close()
            enc_file.close()
            print("Encrypting done. Results saved in file: '{0}'".format(
                enc_file_name))
            break
        else:
            enc_str = enigma.encryptStr(buf)
            enc_file.write(enc_str)

    enc_file = open(enc_file_name, "rb")
    dec_file = open(dec_file_name, "wb")

    enigma.reset()
    print("Start decrypting '{0}' ...".format(enc_file_name))
    while True:
        buf = enc_file.read(MAX_LEN)
        if (not len(buf)):
            enc_file.close()
            dec_file.close()
            print("Decrypting done. Results saved in file: '{0}'".format(
                dec_file_name))
            break
        else:
            dec_str = enigma.encryptStr(buf)
            dec_file.write(dec_str)
예제 #6
0
def main():
    try:
        file = open(sys.argv[1], "rb")
    except IndexError:
        print("Set file as argv[1]")
        return

    rotors = []
    for _ in range(ROTORS_COUNT):
        rotors.append(Rotor())
        
    enigma = Enigma(rotors, Reflector())
    print("!!!!!!!!!")
    print(enigma)
    print("!!!!!!!!!")
    print("!!!!!!!!!")
    print()
    print()

    enc_file_name = "enc_" + sys.argv[1] 
    dec_file_name = "dec_" + sys.argv[1] 
    enc_file = open(enc_file_name, "wb")

    while True:
        # считывается MAX_LEN символов из файла
        buf = file.read(MAX_LEN)
        if(not len(buf)):
            file.close()
            enc_file.close()
            break
        else:
            enc_str = enigma.encryptStr(buf)
            enc_file.write(enc_str)


    enc_file = open(enc_file_name, "rb")    
    dec_file = open(dec_file_name, "wb")
    
    enigma.reset()
    while True:
        buf = enc_file.read(MAX_LEN)
        if(not len(buf)):
            enc_file.close()
            dec_file.close()
            break
        else:
            dec_str = enigma.encryptStr(buf)
            dec_file.write(dec_str)
예제 #7
0
파일: typex.py 프로젝트: nickmarden/typex
    def __init__(self, encryptors=[]):
        # Encryptors must be a list, everything in that list
        # must be either a stator or a rotor and stators
        # must be before rotors
        if type(encryptors) != list:
            raise TypeError("Encryptors must be a list")
        else:
            found_rotors = False
            for e in encryptors:
                if isinstance(e, Rotor):
                    found_rotors = True
                elif isinstance(e, Stator):
                    if found_rotors:
                        raise ValueError("Stators must come before Rotors")
                else:
                    raise TypeError("All encryptors must be Stators or Rotors")
        self.encryptors = encryptors

        self.reflector = Reflector()
예제 #8
0
    def test_if_encryptors_are_valid(self):
        self.assertTrue(
            isinstance(
                TypeX(encryptors=[
                    Stator(wiring='ABCDEFOPQGHIJKLMNRSTXYZUVW',
                           initial_position=3),
                    Rotor(wiring='QWERTYUIOPASDFGHJKLZXCVBNM',
                          initial_position=4,
                          notchings=[0, 5, 12, 16, 25])
                ]), TypeX))

        with self.assertRaises(TypeError):
            TypeX(encryptors='a flamingo wrapped in tinsel')

        # Pass in encryptors that include a non-Encryptor
        with self.assertRaises(TypeError):
            TypeX(encryptors=[
                Stator(wiring='ABCDEFOPQGHIJKLMNRSTXYZUVW',
                       initial_position=3), 'flamingo'
            ])

        # Pass in encryptors that include a Reflector
        with self.assertRaises(TypeError):
            TypeX(encryptors=[
                Stator(wiring='ABCDEFOPQGHIJKLMNRSTXYZUVW',
                       initial_position=3),
                Reflector()
            ])

        # Pass in encryptors that are out of order
        with self.assertRaises(ValueError):
            TypeX(encryptors=[
                Rotor(wiring='QWERTYUIOPASDFGHJKLZXCVBNM',
                      initial_position=4,
                      notchings=[0, 5, 12, 16, 25]),
                Stator(wiring='ABCDEFOPQGHIJKLMNRSTXYZUVW', initial_position=3)
            ])
예제 #9
0
 def __init__(self, offset1, offset2, offset3):
     self.rot1 = Rotor(offset1, rotor_num=1)
     self.rot2 = Rotor(offset2, rotor_num=2)
     self.rot3 = Rotor(offset3, rotor_num=3)
     self.reflector = Reflector(ALPHABET)
     self.plugboard = Plugboard(ALPHABET, PLUGBOARD_LIST)
예제 #10
0
파일: enigma.py 프로젝트: dalemyers/Enigma
            e = self.reflector.reflect(e)
            e = self.left_rotor.convert_backward(e)
            e = self.middle_rotor.convert_backward(e)
            e = self.right_rotor.convert_backward(e)
            e = self.plugboard.convert(e)
            self.right_rotor.increment_position()
            encrypted += e

        return encrypted


if __name__ == "__main__":
    r_right = Rotor(3, 0)
    r_middle = Rotor(2, 0)
    r_left = Rotor(1, 0)
    reflector = Reflector("A")
    plugboard = Plugboard("AZ BP CH DN EM FS GW JY KT LQ")

    input_text = "HELLOWORLD"

    print "Input:", input_text

    e = Enigma(reflector, r_left, r_middle, r_right, plugboard)
    encrypted = e.encrypt(input_text)
    print "Encrypted:", encrypted

    r_left.set_position(0)
    r_middle.set_position(0)
    r_right.set_position(0)

    decrypted = e.encrypt(encrypted)
예제 #11
0
M3A1 = Rotor(M3A_1)
M3A2 = Rotor(M3A_2)

MVEN11 = Rotor(EN1_1)
MVEN12 = Rotor(EN1_2)
MVEN13 = Rotor(EN1_3)
MVM3A1 = Rotor(M3A_1)
MVM3A2 = Rotor(M3A_2)

D_MVEN11 = Rotor(EN1_1)
D_MVEN12 = Rotor(EN1_2)
D_MVEN13 = Rotor(EN1_3)
D_MVM3A1 = Rotor(M3A_1)
D_MVM3A2 = Rotor(M3A_2)

rf = Reflector(R)


def main():
    choice = int(
        raw_input(
            "Enter 1 for \"1930 Enigma I,\" 2 for \"1938 M3 Army,\" or 3 for Mohamed/Vincent Rotor: "
        ))
    encode_decode = int(raw_input("Encipher (1) or decipher (2)? "))
    cipherText = raw_input("What would you like to encipher? ")
    if choice == 1:
        machine = Machine([EN11, EN12, EN13], rf)
        print machine.encipher(cipherText)
    elif choice == 2:
        machine = Machine([EN11, EN12, EN13, M3A1, M3A2], rf)
        print machine.encipher(cipherText)