close

Вход

Забыли?

вход по аккаунту

?

лаба 4 (2)

код для вставкиСкачать
Министерство образования Республики Беларусь
УО "Барановичский государственный университет"
Кафедра экономики и организации производства
Инженерный факультет
Методы защиты компьютерной информации
Лабораторная работа №4
"Шифрование методом аналитических преобразований"
Выполнил:
студент 4 курса Группы ИСТ-41
Мешков А. В.
Проверил: Казак Ю. И.
Барановичи 2013
Цель: Научиться разрабатывать алгоритмы шифрования методом аналитических преобразований, приобрести навыки разработки программ, использующих шифрование методом аналитических преобразований.
Задание
Разработать программу, осуществляющую шифрование введенной строки с использованием алгебры матриц на основе вводимой ключевой матрицы Ann. Размерность ключевой матрицы нужно выбрать по правилу: n = (k mod 4) + 2 , где k - номер выполняемого варианта работы.
Код программы:
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 WindowsFormsApplication1
{
public partial class Form1 : Form
{
string[] text;
string[] chisla;
int alf;
double[,] obr;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "mtr files (*.mtr)|*.mtr|All files (*.*)|*.*";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
Stream mystream = File.Open(openFileDialog1.FileName, FileMode.Open, FileAccess.Read);
StreamReader reader = new StreamReader(mystream, Encoding.GetEncoding(1251));
string s = reader.ReadLine();
dataGridView1.ColumnCount = Convert.ToInt32(s);
dataGridView1.RowCount = Convert.ToInt32(s);
for (int j = 0; j < dataGridView1.RowCount; j++)
{
s = reader.ReadLine();
string[] s1 = s.Split(' ');
for (int i = 0; i < dataGridView1.ColumnCount; i++)
{
dataGridView1[i, j].Value = s1[i];
}
}
s = reader.ReadLine();
string[] a = s.Split(' '); alf=s.Replace(" ","").Length;
text=new string[alf];
chisla = new string[alf];
string ss = reader.ReadLine();
string[] ss1=ss.Split(' ');
for (int j = 0; j < alf; j++)
{
text[j] = a[j];
chisla[j] = ss1[j];
}
dataGridView1.AutoResizeColumns();
obr = new double[dataGridView1.ColumnCount, dataGridView1.ColumnCount];
for (int j = 0; j < dataGridView1.RowCount; j++)
{
s = reader.ReadLine();
string[] obr1 = s.Split(' ');
for (int i = 0; i < dataGridView1.ColumnCount; i++)
{
obr[i,j] = Convert.ToDouble(obr1[i]);
}
}
reader.Close();
mystream.Close();
}
}
private void button2_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "txt files (*.txt)|*.txt|enc files (*.enc)|*.enc|All files (*.*)|*.*";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
Stream mystream = File.Open(openFileDialog1.FileName, FileMode.Open, FileAccess.Read);
StreamReader reader = new StreamReader(mystream, Encoding.GetEncoding(1251));
textBox1.Text = reader.ReadLine();
reader.Close();
mystream.Close();
}
}
private void button3_Click(object sender, EventArgs e)
{
textBox2.Clear();
int n = dataGridView1.ColumnCount, i, j, i1, mas = 0;
string s = textBox1.Text.Replace(" ", "").ToLower();
int dlina = s.Length % n;
int[,] mtr = new int[n, n];
int[] index = new int[s.Length];
for (j = 0; j < n; j++)
for (i = 0; i < n; i++)
mtr[i, j] = Convert.ToInt32(dataGridView1[i, j].Value);
for (int ii = 0; ii < s.Length; ii++)
{
for (int j1 = 0; j1 < alf; j1++)
{
if (text[j1] == s.Substring(ii, 1))
{
index[ii] = Convert.ToInt32(chisla[j1]);
}
}
}
if (dlina == 0)
{
for (i = 0; i < s.Length; i += n)
{
for (j = 0; j < n; j++)
{
mas = 0;
for (i1 = 0; i1 < n; i1++)
{
mas += mtr[i1, j] * index[i + i1];
}
textBox2.Text += mas + "; ";
}
}
}
else
{
int dl = n - dlina;
int[] mas1 = new int[s.Length+dl];
Random rnd=new Random();
for (i = 0; i < s.Length + dl; i++)
{
if (i < s.Length)
mas1[i] = index[i];
else
mas1[i] = rnd.Next(32);
}
for (i = 0; i < s.Length+dl; i += n)
{
for (j = 0; j < n; j++)
{
mas = 0;
for (i1 = 0; i1 < n; i1++)
{
mas += mtr[i1, j] * mas1[i + i1];
}
textBox2.Text += mas + "; ";
}
}
}
}
private void button4_Click(object sender, EventArgs e)
{
textBox2.Clear();
string s = textBox1.Text; int kol = 0, i,j,i1, n=dataGridView1.ColumnCount;
double mas;
string s1 = s.Replace(" ", "");
string[] s2 = s1.Split(';'); for (i = 0; i < s.Length; i++)
{
if (s.Substring(i, 1) == " ") kol++;
}
double[] obr2 = new double[kol];
int[] massiv = new int[kol];
for (i = 0; i < kol; i++)
obr2[i] = Convert.ToDouble(s2[i]);
for (i = 0; i < kol; i +=n)
{
for (j = 0; j < n; j++)
{
mas = 0; double rk = 0;
for (i1 = 0; i1 < n; i1++)
{
mas += obr[i1, j] * obr2[i + i1];
}
rk = Math.Round(mas);
if (rk < 1) textBox2.Text += Convert.ToString(text[Convert.ToInt32(rk)]); else textBox2.Text += Convert.ToString(text[Convert.ToInt32(rk)-1]);
}
}
}
private void button5_Click(object sender, EventArgs e)
{
saveFileDialog1.Filter = "enc files (*.enc)|*.enc|All files (*.*)|*.*";
if (saveFileDialog1.ShowDialog() == DialogResult.OK) {
Stream mystream = File.Open(saveFileDialog1.FileName, FileMode.Create, FileAccess.Write);
StreamWriter writer = new StreamWriter(mystream, Encoding.GetEncoding(1251));
writer.Write(textBox2.Text);
writer.Close();
mystream.Close();
}
}
}
}
Результат работы программы:
Вывод: Научился разрабатывать алгоритмы шифрования методом аналитических преобразований, приобрел навыки разработки программ, использующих шифрование методом аналитических преобразований.
2
Документ
Категория
Рефераты
Просмотров
88
Размер файла
95 Кб
Теги
лаба
1/--страниц
Пожаловаться на содержимое документа