Простое шифрование текста, программа зацикливается - 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();
}
}
}