Пример простого алгоритма перестановки

Метод перестановки – несложный метод криптографического преобразования. Используется, как правило, в сочетании с другими методами.При шифровании этим методом переставляются не буквы алфавита, а буквы открытого текста. Например, сообщение разбито на 4 группы знаков, включая пробелы, и в каждой группе буквы переставлены в соответствии с правилом:

  1  2  3  4

  2  4  1  3

В этом случае фраза:

ОСНОВЫ ЗАЩИТЫ ИНФОРМАЦИИ

будет представлена в следующем виде:

СООНЫЗВ ЩТАИ НЫИОМФРИАИ.

В случае перестановки таблицы частот для пар и трех букв показывают наличие  стандартных буквенных пар, позволяя реконструировать открытый текст путем поиска тех перестановок, которые их воссоединяют. Следовательно, ключ, используемый для преобразования открытого текста, может быть восстановлен по одной криптограмме.

Описание исходных данных

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

Вариант задания:

Номер вар.

Метод шифрования

Таблица

Номер задания в таблице

Представление исходного текста

15

Перестановка

3

5

ASCI-код

 

 

Группы перестановок:

Номер вар.

Группа перестановки

5

clip_image002

 

В виду своей простоты алгоритм описан в предыдущем пункте поэтому не приводится.

Текст программы

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace ZILAB1

{

    public partial class Form1 : Form

    {

        int state;

        int[] key,unkey;

        public Form1()

        {

            InitializeComponent();

            state = 1;           

            int[] k = {2,5,4,3,1};

            key = k;

        }

        private void button2_Click(object sender, EventArgs e)

        {

            Close();

        }

        int[] getunkey(int[] k)

        {

            int[] res = new int[k.Length];

            for (int i = 0; i < k.Length; i++)

                res[k[i] – 1] = i + 1;

            return res;

        }

        string crypt(string msg,bool f)

        {

            string tmp1, tmp2, res;

            int[] k ;

            if(f) k=key;

            else k = getunkey(key);

            res = "";

            for (int i = 0; i < (int)(1+(msg.Length/k.Length)); i++)

            {

                if ((i + 1) * k.Length > msg.Length) return res += msg.Substring(i * k.Length, msg.Length – (i * k.Length));

                tmp1 = msg.Substring(i * k.Length, k.Length);

                  tmp2 = "";

                for (int n = 0; n < k.Length; n++)

                     tmp2 += tmp1.Substring(k[n] – 1, 1);

                res += tmp2;

            }

            return res;

        }

        private void button1_Click(object sender, EventArgs e)

        {

            switch (state)

            {

                case 1://Зашифровать

                    {

                        groupBox1.Text = "Криптограмма";

                        button1.Text = "Расшифровать";

                        textBox1.Text = crypt(textBox1.Text,true);

                        state = 2;

                        break;

                    }

                case 2://Расшифровать

                    {

                        groupBox1.Text = "Исходный текст";

                        button1.Text = "Зашифровать";

                        textBox1.Text = crypt(textBox1.Text,false);

                        state = 1;

                        break;

                    }

            }

        }

    }

}

Результаты работы программы

Исходный текст криптограммы:

clip_image004

После шифрования:

clip_image006


 

После пасшифровки:

clip_image007

Видно, что начальная и конечная последовательность совпали, кроме того проверенна корректность шифрованных данных, она выполняется в соответствии с  указанным алгоритмом, таким образом можно сделать вывод о правильности работы программы.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100