Гаммирование с ЛКГ

Здравствуйте) Вот такой вопрос: написала прогу, она вроде работает, но есть один момент… если добавить в алфавит маленькие буквы, то ломается дешифрование. Подскажите, пожалуйста ошибочку :pleading_face: Заранее благодарна :upside_down_face:

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;
        }
    }
}

Ой, все, разобралась :face_with_hand_over_mouth: Сама же регистр подняла