Дипломы, курсовые, рефераты, контрольные...
Срочная помощь в учёбе

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

РефератПомощь в написанииУзнать стоимостьмоей работы

Если буква может быть сдвинута в пределах алфавита. Если буква может быть сдвинута в пределах алфавита. Если буква может быть сдвинута в пределах алфавита. If ((Convert.ToInt16(stroka) ≥ 1072) && (Convert.ToInt16(stroka) <= 1103)). If ((Convert.ToInt16(stroka)>= 1072) && (Convert.ToInt16(stroka) <= 1103)). If ((Convert.ToInt16(stroka)>= 1040) && (Convert.ToInt16(stroka) ≤ 1071)). If… Читать ещё >

Описание алгоритма перестановки (реферат, курсовая, диплом, контрольная)

В данной лабораторно работе разработаны 3 генератора: линейный конгруэнтный генератор, нелинейный конгруэнтный генератор, и алгоритм Блюма-Микали.

Алгоритм Блюма — Микали — это криптографически стойкий алгоритм генерации псевдослучайных последовательностей, с использованием зерна.

Стойкость алгоритма определяется трудностью решения задачи дискретного логарифма. Пусть g — просто, и p — простое. Ключ используется в качестве начального значения 0 x, последовательность формируется согласно рекуррентному выражению x g p i x i+1 = mod. Выходом генератора является 1, если 2 ?1 < p i x, и 0 в противном случае. Если p достаточно велико, чтобы вычисление дискретного логарифма mod p стало физически невозможным, то этот генератор — безопасен.

Демонстрация работы программы

Рисунок 3.1 — Работа программы с ключом Рисунок. Текстовый файл для шифрования.

Рисунок. Зашифрованный файл (алгоритм Блюма-Микали).

Рисунок. Расшифрованный файл.

Вывод

Во время выполнения лабораторно работы:

  • — реализовал метод гаммирования линейным конгруэнтным генератором;
  • — реализовал метод гаммирования нелинейным конгруэнтным генератором;
  • — реализовал метод гаммирования алгоритмом Блюма-Микали.

А. Код программы

using …

namespace bespeka4_bard.

{.

public partial class Form1: Form.

{.

public Form1().

{.

InitializeComponent ();

}.

int value = 0;

private void button1_Click (object sender, EventArgs e).

{.

int key = 0; string s = «» ;

int m=0, x=0, a=0, c=0;

m = (int)numericUpDownM.Value;

x = (int)numericUpDownX.Value;

a = (int)numericUpDownA.Value;

c = (int)numericUpDownC.Value;

if (m < a || m < c || m < x).

MessageBox.Show («Введены не верные данные! Проверте: x < M, a < M, c < M.»);

else.

{.

//Файл для шифрований.

openFileDialog1.Filter = «txt files (*.txt)|*.txt» ;

if (openFileDialog1.ShowDialog () == System.Windows.Forms.DialogResult.OK).

{.

System.IO.StreamReader sr = new.

System.IO.StreamReader (openFileDialog1.FileName);

//Сохраняем сюда.

StreamWriter sw = new StreamWriter («C:/baspeke4/1shifr.txt»);

while (!sr.EndOfStream).

{.

s = sr. ReadLine ();

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

{.

x = ((a * x) + c) % m; // формула линейного конгруэнтного метода генерации псевдослучайных чисел.

key = x;

}.

sw.WriteLine (Shifr (s, key));

}.

sr.Close ();

sw.Close ();

MessageBox.Show («Файл зашифрован!»);

}.

}.

}.

private void button2_Click (object sender, EventArgs e).

{.

int key = 0;

int m = 0, x = 0, a = 0, c = 0;

m = (int)numericUpDownM.Value;

x = (int)numericUpDownX.Value;

a = (int)numericUpDownA.Value;

c = (int)numericUpDownC.Value;

string s = «» ;

if (m < a || m < c || m < x).

MessageBox.Show («Введены не верные данные! Проверте: x < M, a < M, c < M.»);

else.

{.

StreamReader sr = new StreamReader («C:/baspeke4/1shifr.txt»);

StreamWriter sw = new StreamWriter («C:/baspeke4/rash.txt»);

while (!sr.EndOfStream).

{.

s = sr. ReadLine ();

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

{.

x = ((a * x) + c) % m; // формула линейного конгруэнтного метода генерации псевдослучайных чисел.

key = x;

}.

sw.WriteLine (Rashifr (s, key));

}.

sr.Close ();

sw.Close ();

MessageBox.Show («Файл расшифрован!»);

}.

}.

//шифровка.

private string Shifr (string stroka, int keyword).

{.

string result = «» ;

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

{.

//Если величина сдвига больше длины алфавита кирилицы.

if (keyword > 32).

keyword = keyword % 32;

//Если не кириллица.

if (((int)(stroka [i]) 1103)).

result += stroka [i];

//Если буква является строчной.

if ((Convert.ToInt16(stroka [i]) >= 1072) && (Convert.ToInt16(stroka [i]) <= 1103)).

{.

//Если буква, после сдвига выходит за пределы алфавита.

if (Convert.ToInt16(stroka [i]) + keyword > 1103).

//Добавление в строку результатов символ.

result += Convert. ToChar (Convert.ToInt16(stroka [i]) + keyword — 32);

//Если буква может быть сдвинута в пределах алфавита.

else.

//Добавление в строку результатов символ.

result += Convert. ToChar (Convert.ToInt16(stroka [i]) + keyword);

}.

//Если буква является прописной.

if ((Convert.ToInt16(stroka [i]) >= 1040) && (Convert.ToInt16(stroka [i]) <= 1071)).

{.

//Если буква, после сдвига выходит за пределы алфавита.

if (Convert.ToInt16(stroka [i]) + keyword > 1071).

//Добавление в строку результатов символ.

result += Convert. ToChar (Convert.ToInt16(stroka [i]) + keyword — 32);

//Если буква может быть сдвинута в пределах алфавита.

else.

//Добавление в строку результатов символ.

result += Convert. ToChar (Convert.ToInt16(stroka [i]) + keyword);

}.

}.

return result;

}.

//расшифровка.

private string Rashifr (string stroka, int keyword).

{.

string result = «» ;

int tr = 0, t = 0;

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

{.

//Если величина сдвига больше длины алфавита кирилицы.

if (keyword > 32).

keyword = keyword % 32;

//Если не кириллица.

if (((int)(stroka [i]) 1103)).

result += stroka [i];

//Если буква является строчной.

if ((Convert.ToInt16(stroka [i]) >= 1072) && (Convert.ToInt16(stroka [i]) <= 1103)).

{.

//Если буква, после сдвига выходит за пределы алфавита.

if (Convert.ToInt16(stroka [i]) — keyword < 1072).

//Добавление в строку результатов символ.

result += Convert. ToChar (Convert.ToInt16(stroka [i]) — keyword + 32);

//Если буква может быть сдвинута в пределах алфавита.

else.

//Добавление в строку результатов символ.

result += Convert. ToChar (Convert.ToInt16(stroka [i]) — keyword);

}.

//Если буква является прописной.

if ((Convert.ToInt16(stroka [i]) >= 1040) && (Convert.ToInt16(stroka [i]) <= 1071)).

{.

//Если буква, после сдвига выходит за пределы алфавита.

if (Convert.ToInt16(stroka [i]) — keyword < 1040).

//Добавление в строку результатов символ.

result += Convert. ToChar (Convert.ToInt16(stroka [i]) — keyword + 32);

//Если буква может быть сдвинута в пределах алфавита.

else.

//Добавление в строку результатов символ.

result += Convert. ToChar (Convert.ToInt16(stroka [i]) — keyword);

}.

}.

return result;

}.

private void button3_Click (object sender, EventArgs e).

{.

MessageBox.Show («Внимание! x < M, a < M, c < M.»);

numericUpDownM.Value = 100;

numericUpDownX.Value = 2;

numericUpDownA.Value = 8;

numericUpDownC.Value = 65;

}.

private void button6_Click (object sender, EventArgs e).

{.

int key = 0; string s = «» ;

int m = 0, x = 0, a = 0, b = 0, c = 0;

m = (int)numericUpDownM1.Value;

x = (int)numericUpDownX1.Value;

a = (int)numericUpDownA1.Value;

b = (int)numericUpDownB1.Value;

c = (int)numericUpDownC1.Value;

if (m < a || m < c || m < x || m < b).

MessageBox.Show («Введены не верные данные! Проверте: x < M, a < M, c < M.»);

else.

{.

//Файл для шифрований.

openFileDialog1.Filter = «txt files (*.txt)|*.txt» ;

if (openFileDialog1.ShowDialog () == System.Windows.Forms.DialogResult.OK).

{.

System.IO.StreamReader sr = new.

System.IO.StreamReader (openFileDialog1.FileName);

//Сохраняем сюда.

StreamWriter sw = new StreamWriter («C:/baspeke4/nelen_1shifr.txt»);

while (!sr.EndOfStream).

{.

s = sr. ReadLine ();

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

{.

x = ((a * (x*x)) + (b*x)+c) % m; // формула линейного конгруэнтного метода генерации псевдослучайных чисел.

key = x;

}.

sw.WriteLine (Shifr (s, key));

}.

sr.Close ();

sw.Close ();

MessageBox.Show («Файл зашифрован!»);

}.

}.

}.

private void button5_Click (object sender, EventArgs e).

{.

int key = 0;

int m = 0, x = 0, a = 0, b = 0, c = 0;

m = (int)numericUpDownM1.Value;

x = (int)numericUpDownX1.Value;

a = (int)numericUpDownA1.Value;

b = (int)numericUpDownB1.Value;

c = (int)numericUpDownC1.Value;

string s = «» ;

if (m < a || m < c || m < x||m.

MessageBox.Show («Введены не верные данные! Проверте: x < M, a < M, c < M.»);

else

{

StreamReader sr = new StreamReader («C:/baspeke4/nelen_1shifr.txt»);

StreamWriter sw = new StreamWriter («C:/baspeke4/nelen_rash.txt»);

while (!sr.EndOfStream)

{

s = sr. ReadLine ();

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

{

x = ((a * (x * x)) + (b * x) + c) % m;// формула линейного конгруэнтного метода генерации псевдослучайных чисел

key = x;

}

sw.WriteLine (Rashifr (s, key));

}

sr.Close ();

sw.Close ();

MessageBox.Show («Файл расшифрован!»);

}

}

private void button4_Click (object sender, EventArgs e)

{

MessageBox.Show («Внимание! x < M, a < M, b < M, c < M.»);

numericUpDownM1.Value = 100;

numericUpDownX1.Value = 2;

numericUpDownA1.Value = 8;

numericUpDownB1.Value = 34;

numericUpDownC1.Value = 65;

}

private void button7_Click (object sender, EventArgs e)

{

int p = 0, x = 0, g = 0, a=0, key =0;

string s = «» ;

p = (int)numericUpDownP.Value;

g = (int)numericUpDownG.Value;

x = (int)numericUpDownXx.Value;

//if (m < a || m < c || m < x || m < b)

// MessageBox. Show («Введены не верные данные! Проверте: x < M, a < M, c < M.»);

//else

{

//Файл для шифрований

openFileDialog1.Filter = «txt files (*.txt)|*.txt» ;

if (openFileDialog1.ShowDialog () == System.Windows.Forms.DialogResult.OK)

{

System.IO.StreamReader sr = new

System.IO.StreamReader (openFileDialog1.FileName);

//Сохраняем сюда

StreamWriter sw = new StreamWriter («C:/baspeke4/Blum-Micali_shifr.txt»);

while (!sr.EndOfStream)

{

s = sr. ReadLine ();

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

{

a = modExp (g, x, p);

x = a;

key = x;

}

sw.WriteLine (Shifr (s, key));

}

sr.Close ();

sw.Close ();

MessageBox.Show («Файл зашифрован!»);

}

}

}

public static int modExp (int g, int x, int p)

{

int r = 1;

while (x > 0)

{

if (x % 2 == 1)

r = r * g % p;

x = (int)Math.Floor ((double)x / 2);

g = g * g % p;

}

return r;

}

private void button8_Click (object sender, EventArgs e)

{

int p = 0, x = 0, g = 0, a = 0, key = 0;

string s = «» ;

p = (int)numericUpDownP.Value;

g = (int)numericUpDownG.Value;

x = (int)numericUpDownXx.Value;

StreamReader sr = new StreamReader («C:/baspeke4/Blum-Micali_shifr.txt»);

StreamWriter sw = new StreamWriter («C:/baspeke4/Blum-Micali_rash.txt»);

while (!sr.EndOfStream)

{

s = sr. ReadLine ();

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

{

a = modExp (g, x, p);

x = a;

key = x;

}

sw.WriteLine (Rashifr (s, key));

}

sr.Close ();

sw.Close ();

MessageBox.Show («Файл расшифрован!»);

}

private void button9_Click (object sender, EventArgs e)

{

numericUpDownP.Value=39 319;

numericUpDownG.Value=4;

numericUpDownXx.Value=1022;

}

}

}

Показать весь текст
Заполнить форму текущей работой