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