Шифрование методом "решетки" - C#
Формулировка задачи:
Здравствуйте подскажите по какому принципу закидывать буквы в решетки необходимо?
вот описание http://cybern.ru/resheto-crypt.html
поворот я сделал
static void Main(string[] args)
{
string alf = "алексейку"; //алфавит без буквы Ё,Й и буквы Ъ(=Ь)
char[,] matrix = new char[3, 3]; //создаем и инициализируем массив символов(матрицу)
byte k = 0; //позиция в кодовом слове
int z = 0; //позиция в алфавите
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++) //проход всей матрицы
{
matrix[i, j] = alf[z]; //вставляем букву в матрицу
z++; //переходим к следующей букве алфавита
}
}
#region "Выводим на экран матрицу"
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++) Console.Write(matrix[i, j] + " ");//проход всей матрицы
for (int j2 = 3 - 1; j2 >= 0; j2--) // рядом проходим поворот матрицы повернутой на 90 градусов
Console.Write(matrix[j2, i] + " ");
Console.WriteLine();
}
#endregion
for (int i = 0; i < 3; i++)
{
for (int j2 = 0; j2 < 3;j2++)
Console.Write(matrix[j2, 3 - 1 - i]+" "); //поворот на 270
for (int j = 0; j < 3; j++)
Console.Write(matrix[3 - 1 - i, 3 - 1 - j] + " ");//поворот на 360
Console.WriteLine();
}
Console.ReadKey();
}Решение задачи: «Шифрование методом "решетки"»
textual
Листинг программы
z=0;//смещение в шифруемой строке
for(int r=0;r<4;r++) { //4 поворота решетки
p=0; //при каждом повороте начинаем использовать ключ заново
for(int i=0;i<3;i++)
for(int j=0;j<3;j++){
c=secret[p] & 3; //берем очередную цифру из ключа
c=(c+r) % 4; //c-номер квадратика с учетом поворота
shiftij(i,j,di,dj,c); //определим сдвиг из квадрата 0 в квадрат с
rotate(i,j,ri,rj,c); //поворот координат на 90с градусов по часовой
matrix[ri+di,rj+dj]=alf[z];
z++;
p++;
}
}