Простое шифрование текста, программа зацикливается - 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(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д