Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ошибка при декодировании

32K
04 марта 2013 года
xface
43 / / 07.11.2009
Привет. Дано задание: Напишите программы шифрования и расшифрования текстового файла с использованием ключа, заданного строкой символов. При шифровании, к коду каждого символа строки исходного файла прибавить код очередного символа ключа и вычесть по-рядковый номер символа в строке. В выходной файл символы зашифрованной строки записывать в обратном порядке.

Написал код, но при расшифровке, если входной текст больше 57 символов, появляется ошибка. В чем может быть дело?


Код:
public string getKey()
        {
            if (Key.Length == (kIdx + 1))
                kIdx = -1;
   
            kIdx++;

            return Key[kIdx].ToString();
        }

        public void Encryption() // Шифрование
        {
            EncryptedText = "";
            List<char> Enc = new List<char>();
         
            for (int i = 0; i < PlainText.Length; i++)
            {
               
                Enc.Add ((char)(Convert.ToByte(PlainText[i]) + Convert.ToByte(getKey())- i));
            }
            char [] ch=Enc.ToArray();
            for (int i = 0; i < PlainText.Length; i++)
            {
                EncryptedText += ch[i];
            }

        }

        public void Decryption() // Расшифровка
        {
            PlainText = "";
            List<char> Dec = new List<char>();
           
            for (int i = 0; i < EncryptedText.Length; i++)
            {

                Dec.Add((char)(Convert.ToByte(EncryptedText[i]) - Convert.ToByte(getKey()) + i));
            }
            char[] ch = Dec.ToArray();
            for (int i = 0; i < EncryptedText.Length; i++)
            {
                PlainText += ch[i];
            }

        }
Исходник http://rghost.ru/44271424
341
05 марта 2013 года
Der Meister
874 / / 21.12.2007
В .NET строки хранятся в кодировке Unicode. Иными словами, каждый символ строки - это джва байта.
Код:
public char getKey() {
    kIdx = (kIdx + 1) % Key.Length;
    return Key[kIdx];
}

public void Encryption() // Шифрование
{
    kIdx = 0;

    int length = PlainText.Length;
    char[] Enc = new char[length];

    int last_index = length - 1;
    for (int i = 0; i < length; i++) {
        Enc[last_index - i] = (char) (PlainText[i] + getKey() - i);
    }

    EncryptedText = new string(Enc);
}

public void Decryption() // Расшифровка
{
    kIdx = 0;

    int length = PlainText.Length;
    char[] Dec = new char[length];

    int last_index = length - 1;
    for (int i = 0; i < length; i++) {
        Dec[i] = (char) (EncryptedText[last_index - i] - getKey() + i);
    }

    PlainText = new string(Dec);
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог