Простое шифрование текста, программа зацикливается - C#

Узнай цену своей работы

Формулировка задачи:

Задача состоит в следующем: 1)Считать текстовую информацию из файла 2) Зашифровать информацию 3) Сохранить в файл Возникла проблема с шифрованием текста. Зашифровать нужно по этому алгоритму: Bi = (Ai+Ki) mod N Где A – Текст B – Зашифрованный текст К – Ключ i – номер символа в тексте L – длина исходного текста и зашифрованного текста m – длина ключа N – Количество символов в алфавите. Если m >= L, то Bi = (Ai+Ki) mod N – шифрование Если m < L, то Ключ должен быть продублирован, расширен до длины L Т.е. если длинны ключа не хватает на весь текст то он должен повторятся Программа зацикливается, точнее зацикливается алгоритм шифрования, при загрузки файл успешно загружается а при нажатии на кнопку шифровать вылетает и пишет "Индекс за пределами массива". Я сначала со строками работала, потом преобразовала в массив символов, все равно ни чего не помогает, не знаю правильно ли, помогите пожалуйста))) Вот моя программа:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
 
namespace lab1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        string str = ""; //Объявляем переменную, в которую будем записывать текст из файла
        string str2 = ""; //переменная которой будет присваиваться ключ
        //string str3 = "";
        //открываем файл
        private void button1_Click(object sender, EventArgs e)
        {
            if (File.Exists("text.txt"))
            {
                str = File.ReadAllText("text.txt");
            }
            else {
                MessageBox.Show("Файл НЕ существует!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Hand);
            } 
        }
        //записсываем в файл
        private void button2_Click(object sender, EventArgs e)
        {
            File.WriteAllText("text.txt", str);
        }
        //кодируем
        private void button3_Click(object sender, EventArgs e)
        {
            char[] array = str.ToCharArray();
            char[] array2 = str2.ToCharArray();
            for (int i = 0; i < array.Length; i++)
                    {
                        //str = str[i].ToString() + str2[i].ToString();
                        //str = System.Convert.ToString((str[i] + str2[i]) % 256);
                        array[i] = System.Convert.ToChar((array[i] + array2[i]) % 256);
                        i=i+1;
                        //if (i > str2.Length)
                if (i>array2.Length)
                            i = 0;
                    }
            str = System.Convert.ToString(array);
        }
        //открываем файл
        private void button4_Click(object sender, EventArgs e)
        {
            if (File.Exists("text.txt"))
            {
                str = File.ReadAllText("text.txt");
            }
            else
            {
                MessageBox.Show("Файл НЕ существует!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Hand);
            }
        }
        //записываем в файл
        private void button6_Click(object sender, EventArgs e)
        {
            File.WriteAllText("text.txt", str);
        }
        //дишифрование
        private void button5_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < str.Length; i++)
            {
            }
        }
    }
}

Решение задачи: «Простое шифрование текста, программа зацикливается»

textual
Листинг программы
using System;
using System.IO;
 
namespace Crypt
{
    class Crypt
    {
        private string data;
        private string patch;
        private string key;
        private int N = 256;
        public Crypt(string Fpatch, string Fkey)
        {
            patch = Fpatch;
            key = Fkey;
            Read();
        }
        public void NewKey(string Fkey)
        {
            key=Fkey;
        }
        private void Read()
        {
            data = File.ReadAllText(patch);
        }
        private void Write()
        {
            File.WriteAllText(patch, data);
        }
        public void Encrypt()
        {
            char[] result = new char[data.Length];
            for (int i = 0, j = 0; i < data.Length; i++, j++)
            {
                if (j == key.Length) j = 0;
                result[i] = (char)((data[i] + key[j]) % N);
            }
            data = new string(result);
            Write();
        }
        public void Decrypt()
        {
            char[] result = new char[data.Length];
            for (int i = 0, j = 0; i < data.Length; i++, j++)
            {
                if (j == key.Length) j = 0;
                int e;
                for (e = 0; data[i] != (e + key[j]) % N; e++) ;
                result[i] = (char)e;
            }
            data = new string(result);
            Write();
        }
 
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4 из 5
Похожие ответы