Заполнение массива случайным образом (Квадрат Полибия)

Всем привет. Имеется код, организующий шифрацию и дешифрацию введенной строки по квадрату Полибия. Суть в том, что массив символов заполняется не случайным образом, а необходимо, чтобы он был заполнен случайно. Не могу реализовать случайное заполнение. Рабочий код

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    class Program
    {
        static void Main(string[] args)
        {
            var polybius = new PolybiusSquare();
            Console.Write("Введите текст: ");
            var message = Console.ReadLine().ToUpper();
            Console.Write("Введите пароль(без повторов букв): ");
            var pass = Console.ReadLine().ToUpper();
            var cipherText = polybius.PolibiusEncrypt(message, pass);
            Console.WriteLine("Зашифрованный текст: {0}", cipherText);
            Console.WriteLine("Расшифрованный текст: {0}",
                polybius.PolybiusDecrypt(cipherText, pass));
            Console.ReadLine();
        }
    }

class PolybiusSquare
{
    char[,] square;
    string alphabet;
   
public PolybiusSquare(string alphabet = null)
{
    this.alphabet = alphabet ?? "ABCDEFGHIJKLMNOPQRSTUVWXYZ ";
    Console.WriteLine("alphabet: " + alphabet);
}

//возвращает квадрат Полибия
char[,] GetSquare(string key)
{
    var newAlphabet = alphabet;
    //удаляем из алфавита все символы которые содержит ключ
    for (int i = 0; i < key.Length; i++)
    {
        newAlphabet = newAlphabet.Replace(key[i].ToString(), "");
        Console.WriteLine("newAlphaBet: " + newAlphabet);
    }

    //добавляем пароль в начало алфавита, а в конец дополнительные знаки
    //для того чтобы избежать пустых ячеек
    newAlphabet = key + newAlphabet + "0123456789!@#$%^&*)_+-=<>?,.";
    Console.WriteLine("newAlphabet + key: " + newAlphabet);

    //получаем размер стороны квадрата
    //округлением квадратного корня в сторону большего целого числа
    var n = (int)Math.Ceiling(Math.Sqrt(alphabet.Length));
    Console.WriteLine("n: " + n);

    //создаем и заполняем массив
    square = new char[n, n];
    var index = 0;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (index < newAlphabet.Length)
            {
                square[i, j] = newAlphabet[index];
                index++;
            }
        }
    }

    return square;
}

//поиск символа в двухмерном массиве
bool FindSymbol(char[,] symbolsTable, char symbol, out int column, out int row)
{
    var l = symbolsTable.GetUpperBound(0) + 1;
    for (int i = 0; i < l; i++)
    {
        for (int j = 0; j < l; j++)
        {
            if (symbolsTable[i, j] == symbol)
            {
                //значение найдено
                row = i;
                Console.WriteLine("row: " + row);
                column = j;
                Console.WriteLine("column: " + column);
                return true;
            }
        }
    }

    //если ничего не нашли
    row = -1;
    column = -1;
    return false;
}



public string PolibiusEncrypt(string text, string password)
{
    var outputText = "";
    var square = GetSquare(password);
    
            var m = text.Length;
            var coordinates = new int[m * 2];
            for (int i = 0; i < m; i++)
            {
                if (FindSymbol(square, text[i], out int columnIndex, out int rowIndex))
                {
                    coordinates[i] = columnIndex;
                    coordinates[i + m] = rowIndex;
                }
            }

            for (int i = 0; i < m * 2; i += 2)
            {
                outputText += square[coordinates[i + 1], coordinates[i]];
                Console.WriteLine("EncryptOutputText: " + outputText);
            }
    return outputText;
}

public string PolybiusDecrypt(string text, string password)
{
    var testText = "";
    var outputText = "";
    var square = GetSquare(password);
    var m = text.Length;
    
            var coordinates = new int[m * 2];
            var j = 0;
            for (int i = 0; i < m; i++)
            {
                if (FindSymbol(square, text[i], out int columnIndex, out int rowIndex))
                {
                    coordinates[j] = columnIndex;
                    coordinates[j + 1] = rowIndex;
                    j += 2;
                }
            }

            for (int i = 0; i < m; i++)
            {
                outputText += square[coordinates[i + m], coordinates[i]];
    }
    return outputText;
}
}

Ответы (0 шт):