Example #1
0
        public string Encrypt(string inputStr, bool isText)
        {
            if (_form != null)
            {
                _progress = new Utils.Progress(0, inputStr.Length, 1, "Шифрование");
                _progress.Show();
            }
            List <byte> bytes = new List <byte>();

            if (isText)
            {
                bytes = Encoding.Default.GetBytes(inputStr).ToList();
            }
            else
            {
                string[] bytesInStrings = inputStr.Split(' ');
                foreach (var ch in bytesInStrings)
                {
                    if (ch == "" || ch == " ")
                    {
                        continue;
                    }
                    bytes.Add(Byte.Parse(ch));
                }
            }

            BigInteger k = KeyGen();
            BigInteger s = BigInteger.ModPow(_h, k, _q);

            _p = BigInteger.ModPow(_g, k, _q);
            List <BigInteger> encryptedMessage = new List <BigInteger>();
            StringBuilder     sb = new StringBuilder();

            for (int i = 0; i < bytes.Count; ++i)
            {
                encryptedMessage.Add(s * bytes[i]);
                sb.Append(encryptedMessage[i].ToString() + '\n');
                if (_form != null)
                {
                    _progress.PerformStep();
                }
            }
            if (_form != null)
            {
                _progress.CloseFormSafe();
            }
            return(sb.ToString());
        }
Example #2
0
        public string Decrypt(string encryptedText)
        {
            string[]          textNumb = encryptedText.Split('\n');
            List <BigInteger> message  = new List <BigInteger>();

            for (int i = 0; i < textNumb.Length; ++i)
            {
                if (textNumb[i] != "" && textNumb[i] != "\r")
                {
                    message.Add(BigInteger.Parse(textNumb[i]));
                }
            }
            if (_form != null)
            {
                _progress = new Utils.Progress(0, message.Count, 1, "Дешифрование");
                _progress.Show();
            }
            BigInteger h = BigInteger.ModPow(_p, _key, _q);

            byte[] decryptedMessage = new byte[message.Count];
            for (int i = 0; i < message.Count; ++i)
            {
                decryptedMessage[i] = (byte)(message[i] / h);
                if (_form != null)
                {
                    _progress.PerformStep();
                }
            }
            if (_form != null)
            {
                _progress.CloseFormSafe();
                string curExt = WordPad.Helpers.ReadHelper.GetExtention(_form.Text);
                if (WordPad.Form1.TxtExts.Any(str => str == curExt))
                {
                    return(Encoding.Default.GetString(decryptedMessage));
                }
                else
                {
                    StringBuilder sb = new StringBuilder();
                    foreach (var b in decryptedMessage)
                    {
                        sb.Append($"{b} ");
                    }
                    return(sb.ToString());
                }
            }
            return(Encoding.Default.GetString(decryptedMessage));
        }
Example #3
0
        public void GenerateSequence(object sender, EventArgs e)
        {
            string result    = Interaction.InputBox("Введите длину генерируемой последовательности (10000)");
            int    seqLength = 10000;

            try {
                int tLen = Int32.Parse(result);
                seqLength = tLen;
            }
            catch (FormatException e2) {
                MessageBox.Show("Неверное число");
            }
            catch (OverflowException e3) {
                MessageBox.Show("Переполнение");
            }
            Utils.Progress progressForm = new Utils.Progress(0, seqLength, 1, "Gen progress");
            progressForm.Show();
            Thread genThread = new Thread(() => {
                GenerateSequenceAbstract(seqLength, ref progressForm);
            });

            genThread.Start();
        }