Exemplo n.º 1
0
        public string CodeEncode(string text, object key, Language language)
        {
            var complexKey = key as ComplexKey;

            var alphabet = SymbolsOperations.GetAlphabet(language);

            var repeatedKey = GetRepeatKey(complexKey.Key, text);

            var result         = new StringBuilder();
            var alphabetLenght = alphabet.Length;

            int i = 0;

            foreach (var letter in text)
            {
                var letterIndex = alphabet.IndexOf(char.ToUpper(letter));

                if (letterIndex < 0)
                {
                    result.Append(letter.ToString());
                }
                else
                {
                    var codeIndex = alphabet.IndexOf(char.ToUpper(repeatedKey[i++]));

                    var index       = (alphabetLenght + letterIndex + ((complexKey.Encrypting ? 1 : -1) * codeIndex)) % alphabetLenght;
                    var codedLetter = alphabet[index];

                    result.Append(SymbolsOperations.GetLetterWithProperRegister(letter, codedLetter));
                }
            }

            return(result.ToString());
        }
Exemplo n.º 2
0
        public string CodeEncode(string text, object key, Language language)
        {
            var result      = new StringBuilder();
            var onlyLetters = new StringBuilder();

            foreach (var letter in text)
            {
                if (char.IsLetter(letter))
                {
                    onlyLetters.Append(letter);
                }
            }

            var frequencyTable = GetLetterFrequencyTable(language);

            frequencyTable = frequencyTable.OrderByDescending(x => x.Value).ToDictionary(x => x.Key, x => x.Value);

            var customFrequencyTable = GetLetterFrequenceTableForText(text, onlyLetters.ToString());

            customFrequencyTable = customFrequencyTable.OrderByDescending(x => x.Value).ToDictionary(x => x.Key, x => x.Value);

            AddValuesToGrid(DataGridView, frequencyTable, customFrequencyTable);

            foreach (var letter in text)
            {
                if (!char.IsLetter(letter))
                {
                    result.Append(letter);
                }
                else
                {
                    onlyLetters.Append(letter);
                    var letterPosition = GetIndex(customFrequencyTable, char.ToLower(letter));
                    var codedLetter    = frequencyTable.ElementAt(letterPosition).Key;
                    codedLetter = SymbolsOperations.GetLetterWithProperRegister(letter, codedLetter);

                    result.Append(codedLetter);
                }
            }

            return(result.ToString());
        }