Простое шифрование текста, программа зацикливается - 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 Т.е. если длинны ключа не хватает на весь текст то он должен повторятся Программа зацикливается, точнее зацикливается алгоритм шифрования, при загрузки файл успешно загружается а при нажатии на кнопку шифровать вылетает и пишет "Индекс за пределами массива". Я сначала со строками работала, потом преобразовала в массив символов, все равно ни чего не помогает, не знаю правильно ли, помогите пожалуйста))) Вот моя программа:
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.IO;
  10. namespace lab1
  11. {
  12. public partial class Form1 : Form
  13. {
  14. public Form1()
  15. {
  16. InitializeComponent();
  17. }
  18. string str = ""; //Объявляем переменную, в которую будем записывать текст из файла
  19. string str2 = ""; //переменная которой будет присваиваться ключ
  20. //string str3 = "";
  21. //открываем файл
  22. private void button1_Click(object sender, EventArgs e)
  23. {
  24. if (File.Exists("text.txt"))
  25. {
  26. str = File.ReadAllText("text.txt");
  27. }
  28. else {
  29. MessageBox.Show("Файл НЕ существует!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Hand);
  30. }
  31. }
  32. //записсываем в файл
  33. private void button2_Click(object sender, EventArgs e)
  34. {
  35. File.WriteAllText("text.txt", str);
  36. }
  37. //кодируем
  38. private void button3_Click(object sender, EventArgs e)
  39. {
  40. char[] array = str.ToCharArray();
  41. char[] array2 = str2.ToCharArray();
  42. for (int i = 0; i < array.Length; i++)
  43. {
  44. //str = str[i].ToString() + str2[i].ToString();
  45. //str = System.Convert.ToString((str[i] + str2[i]) % 256);
  46. array[i] = System.Convert.ToChar((array[i] + array2[i]) % 256);
  47. i=i+1;
  48. //if (i > str2.Length)
  49. if (i>array2.Length)
  50. i = 0;
  51. }
  52. str = System.Convert.ToString(array);
  53. }
  54. //открываем файл
  55. private void button4_Click(object sender, EventArgs e)
  56. {
  57. if (File.Exists("text.txt"))
  58. {
  59. str = File.ReadAllText("text.txt");
  60. }
  61. else
  62. {
  63. MessageBox.Show("Файл НЕ существует!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Hand);
  64. }
  65. }
  66. //записываем в файл
  67. private void button6_Click(object sender, EventArgs e)
  68. {
  69. File.WriteAllText("text.txt", str);
  70. }
  71. //дишифрование
  72. private void button5_Click(object sender, EventArgs e)
  73. {
  74. for (int i = 0; i < str.Length; i++)
  75. {
  76. }
  77. }
  78. }
  79. }

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

textual
Листинг программы
  1. using System;
  2. using System.IO;
  3.  
  4. namespace Crypt
  5. {
  6.     class Crypt
  7.     {
  8.         private string data;
  9.         private string patch;
  10.         private string key;
  11.         private int N = 256;
  12.         public Crypt(string Fpatch, string Fkey)
  13.         {
  14.             patch = Fpatch;
  15.             key = Fkey;
  16.             Read();
  17.         }
  18.         public void NewKey(string Fkey)
  19.         {
  20.             key=Fkey;
  21.         }
  22.         private void Read()
  23.         {
  24.             data = File.ReadAllText(patch);
  25.         }
  26.         private void Write()
  27.         {
  28.             File.WriteAllText(patch, data);
  29.         }
  30.         public void Encrypt()
  31.         {
  32.             char[] result = new char[data.Length];
  33.             for (int i = 0, j = 0; i < data.Length; i++, j++)
  34.             {
  35.                 if (j == key.Length) j = 0;
  36.                 result[i] = (char)((data[i] + key[j]) % N);
  37.             }
  38.             data = new string(result);
  39.             Write();
  40.         }
  41.         public void Decrypt()
  42.         {
  43.             char[] result = new char[data.Length];
  44.             for (int i = 0, j = 0; i < data.Length; i++, j++)
  45.             {
  46.                 if (j == key.Length) j = 0;
  47.                 int e;
  48.                 for (e = 0; data[i] != (e + key[j]) % N; e++) ;
  49.                 result[i] = (char)e;
  50.             }
  51.             data = new string(result);
  52.             Write();
  53.         }
  54.  
  55.     }
  56. }

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


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

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

12   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы