Здравствуйте) Вот такой вопрос: написала прогу, она вроде работает, но есть один момент… если добавить в алфавит маленькие буквы, то ломается дешифрование. Подскажите, пожалуйста ошибочку Заранее благодарна
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace Gamm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
N = characters.Length;
}
char[] characters = new char[] { 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И',
'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С',
'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь',
'Э', 'Ю', 'Я', '-', ' ', ',', '!', '.'};
private int N; //длина алфавита
//ЛКГ
private string Generate_Pseudorandom_KeyWord(int length)
{
try
{
int m = (int)Math.Pow(2, 31) - 1,
a = 16807,
b = 0,
g0 = 1;
string result = "";
List<int> generatedNumbers = new List<int>();
for (int i = 0; i < 1; i++)
{
g0 = 1;
generatedNumbers.Add(g0);
result += characters[g0];
}
for (int i = 1; i < length; i++)
{
g0 = (a * g0 + b) % m % length;
generatedNumbers.Add(g0);
result += characters[g0];
}
for (int j = 0; j < generatedNumbers.Count; j++) { textBox1.Text += generatedNumbers[j].ToString(); }
return result;
}
catch (Exception e)
{
MessageBox.Show(e.Message + " " + (e.InnerException?.InnerException?.Message ?? "no inner exc") + (e.StackTrace ?? " no stack trace"));
return " ";
}
}
//зашифровать
private void buttonEncrypt_Click(object sender, EventArgs e)
{
string s;
StreamReader sr = new StreamReader("in.txt");
StreamWriter sw = new StreamWriter("out.txt");
while (!sr.EndOfStream)
{
s = sr.ReadLine();
sw.WriteLine(Encode(s, Generate_Pseudorandom_KeyWord(s.Length)));
}
sr.Close();
sw.Close();
}
//расшифровать
private void buttonDecipher_Click(object sender, EventArgs e)
{
string s;
StreamReader sr = new StreamReader("out.txt");
StreamWriter sw = new StreamWriter("int.txt");
while (!sr.EndOfStream)
{
s = sr.ReadLine();
sw.WriteLine(Decode(s, Generate_Pseudorandom_KeyWord(s.Length)));
}
sr.Close();
sw.Close();
}
//зашифровать
private string Encode(string input, string keyword)
{
input = input.ToUpper();
keyword = keyword.ToUpper();
string result = "";
int keyword_index = 0;
foreach (char symbol in input)
{
int c = (Array.IndexOf(characters, symbol) +
Array.IndexOf(characters, keyword[keyword_index])) % N;
result += characters[c];
keyword_index++;
if ((keyword_index + 1) == keyword.Length)
keyword_index = 0;
}
return result;
}
//расшифровать
private string Decode(string input, string keyword)
{
input = input.ToUpper();
keyword = keyword.ToUpper();
string result = "";
int keyword_index = 0;
foreach (char symbol in input)
{
int p = (Array.IndexOf(characters, symbol) + N -
Array.IndexOf(characters, keyword[keyword_index])) % N;
result += characters[p];
keyword_index++;
if ((keyword_index + 1) == keyword.Length)
keyword_index = 0;
}
return result;
}
}
}