Beispiel #1
0
        public static ThinRotor CreateRotorGamma()
        {
            int[] mapping = FactoryBase.ConvertMapping(ROTOR_GAMMA);

            var result = new ThinRotor(mapping, 0);

            return(result);
        }
Beispiel #2
0
        static void Main(string[] args)
        {
            var reflector     = ReflectorFactory.CreateReflectorB();
            var thinReflector = ReflectorFactory.CreateThinReflectorB();

            ThinRotor thinRotor = RotorFactory.CreateRotorBeta();

            Rotor slowRotor   = RotorFactory.CreateRotorI();
            Rotor middleRotor = RotorFactory.CreateRotorII();
            Rotor fastRotor   = RotorFactory.CreateRotorIII();

            var spindle = new Spindle(reflector, slowRotor, middleRotor, fastRotor);

            //var spindle = new Spindle(thinReflector, thinRotor, slowRotor, middleRotor, fastRotor);

            // Ringstellung.
            thinRotor.Offset   = ToI('A');
            slowRotor.Offset   = ToI('A');
            middleRotor.Offset = ToI('A');
            fastRotor.Offset   = ToI('A');

            const char thinRotorPosition   = 'A';
            const char slowRotorPosition   = 'A';
            const char middleRotorPosition = 'A';
            const char fastRotorPosition   = 'A';

            // Initial positions.
            thinRotor.Position   = ToI(thinRotorPosition);
            slowRotor.Position   = ToI(slowRotorPosition);
            middleRotor.Position = ToI(middleRotorPosition);
            fastRotor.Position   = ToI(fastRotorPosition);

            // Note: Enigma can only encrypt/decrypt the 26 letters of the alphabet.
            // (because of this all others: spaces, quotes, commas etc. are ignored)
            string plain = "The quick brown fox jumps over the lazy dog.";

            var plugs = new Dictionary <int, int>
            {
                //{ ToI('A'), ToI('B') },
                //{ ToI('C'), ToI('D') },
                //{ ToI('E'), ToI('F') },
                //{ ToI('G'), ToI('H') },
                //{ ToI('I'), ToI('J') },
                //{ ToI('K'), ToI('L') },
                //{ ToI('M'), ToI('N') },
                //{ ToI('O'), ToI('P') },
                //{ ToI('Q'), ToI('R') },
                //{ ToI('S'), ToI('T') },
                //{ ToI('U'), ToI('V') },
                //{ ToI('W'), ToI('X') },
                //{ ToI('Y'), ToI('Z') },
            };

            var plugboard = new Plugboard(spindle, plugs);

            string encrypted = String.Empty;

            Console.WriteLine("Encrypted:");

            // Encrypt.
            foreach (char c in plain)
            {
                int input = ToI(c);

                if ((input < 0) || (input > 25))
                {
                    // We cannot process this char.
                    continue;
                }

                var output = plugboard.Get(input);

                var ch = Convert.ToChar('A' + output);
                encrypted += ch;
                Console.Write(ch);
                Console.Write(' ');
            }

            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine("Decrypted:");

            // Reset rotor positions.
            thinRotor.Position   = ToI(thinRotorPosition);
            slowRotor.Position   = ToI(slowRotorPosition);
            middleRotor.Position = ToI(middleRotorPosition);
            fastRotor.Position   = ToI(fastRotorPosition);

            // Decrypt.
            foreach (char c in encrypted)
            {
                int input = ToI(c);

                var output = plugboard.Get(input);

                var ch = Convert.ToChar('A' + output);

                Console.Write(ch);
                Console.Write(' ');
            }

            Console.ReadKey();
        }