예제 #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());
        }
예제 #2
0
        private string GenerateSequenceImplementation(int numbers, ref Utils.Progress progressForm)
        {
            StringBuilder sb = new StringBuilder();

            for (int i = 0; i < numbers; ++i)
            {
                sb.Append(NextBit() & 1);
                progressForm.PerformStep();
            }
            progressForm.CloseFormSafe();
            Utils.MultiThreadHelper.SetTextBoxSafe(sb.ToString(), ref TextBox);
            return(sb.ToString());
        }