Ejemplo n.º 1
0
        /// <summary>
        /// Užkoduoja dvejetainiu formatu pateikiamą pranešimą pagal tiesioginį sąsūkos kodą.
        /// </summary>
        /// <param name="text">Pranešimas dvejetainiu formatu</param>
        /// <returns>Užkoduotas pranešimas dvejetainiu formatu</returns>
        public string Encode(string text)
        {
            CleanRegisters();
            text += "000000"; // Užkoduojant pranešimą reikia į galą prirašyti 6 nulius

            StringBuilder sb = new StringBuilder("");

            foreach (char bit in text)
            {
                sb.Append(bit); // Pirmas užkodavimo bitas yra input bito kopija

                // Antras užkodavimo bitas yra gaunamas sumuojant 2, 5, 6 registrus ir ipnut bitą
                char result =
                    BitUtils.AddMod2(
                        BitUtils.AddMod2(_registers[1], _registers[4]),
                        BitUtils.AddMod2(_registers[5], bit)
                        );

                MoveRegisters(bit); // Įstumiame pirmą input bitą į viršutinį registrą

                sb.Append(result);
            }

            return(sb.ToString());
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Dekoduoja dvejetainiu formatu pateikiamą tiesioginio sąsūkos kodo užkoduotą pranešimą tiesioginiu būdu.
        /// </summary>
        /// <param name="text">Užkoduotas pranešimas dvejetainiu formatu</param>
        /// <returns>Dekoduotas pranešimas dvejetainiu formatu</returns>
        public string Decode(string text)
        {
            CleanRegisters();

            StringBuilder sb = new StringBuilder("");

            string[] bitPairs = TransformToPairs(text);

            for (int i = 0; i < bitPairs.Length; i++)
            {
                _bit1 = bitPairs[i][0];
                _bit2 = bitPairs[i][1];

                //char outBit = _upperRegisters[5];

                // Sudedami 2, 5, 6 viršutiniai registrai ir abu input bitai
                char upperSum =
                    BitUtils.AddMod2(
                        BitUtils.AddMod2(_upperRegisters[1], _upperRegisters[4]),
                        BitUtils.AddMod2(_upperRegisters[5], BitUtils.AddMod2(_bit1, _bit2))
                        );



                // Kai praeiname užkodavime pridėtus nulinius bitus, pradedame išsaugoti dekoduotas reikšmes
                if (i >= 6)
                {
                    sb.Append(BitUtils.AddMod2(_upperRegisters[5], MDE(upperSum)));
                }

                // Registrus perstumiame iteracijos pabaigoje
                MoveUpperRegisters(_bit1); // Įstumiame pirmą input bitą į viršutinį registrą
                MoveLowerRegisters(upperSum);

                if (_debuggingIsEnabled)
                {
                    Console.WriteLine("upperSum: " + upperSum);
                    Console.WriteLine();
                }
            }
            return(sb.ToString());
        }