Fлгоритм шифрования RSA на C#

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

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык русский
Дата добавления 03.06.2021
Размер файла 427,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Содержание

Задание

Программная реализация

1. p, q и алфавит

2. Ключи

3. Функция шифрования

4. Функция расшифровки

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

Полный код программы

Задание

разработать программное криптографическое средств защиты информациями с функциями шифрования и расшифрования на основе алгоритма RSA. Простые числа p и q выбрать большие 1000. Открытое сообщение состоит из букв русского алфавита, коды букв соответствуют их положению в алфавите начиная с 1. Для проверки работоспособности разработанной программы вручную зашифровать / расшифровать первые три буквы своей фамилии по алгоритму RSA, сравнить с результатами полученными с помощью разработанного программного криптографического средства.

Программная реализация

1. p, q и алфавит

Для алгоритма шифрования я выбрал простые числа p и q: 1069 и 2503 соответственно. В код программы я ввел заранее выбранные числа и русский алфавит константно, а так же первые 3 буквы своей фамилии как строка для шифрования по умолчанию:

Рисунок 1

2. Ключи

Для шифрования необходимо подготовить ключи и другие значения дл вычислений, а именно производные n, e, d от p и q:

Рисунок 2

Функция calcKey:

Рисунок 3

В данной функции происходит генерация закрытого и открытого ключа алгоритма от чисел p и q, а именно выполнения условий алгоритма и его корректность:

1. e ( 1 < e < n )

С соблюдением условия, что: число e будет взаимно простое с n.

2. число d вычисляется по условию:

d * e = 1 (mod n)

Набор чисел d и n - является закрытым ключом (шифрование).

Набор чисел e и n - является открытым ключом (расшифровка).

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

3. Функция шифрования

Рисунок 4

Формула шифрования: остаток от деления ((№ буквы в алфавите ^ e) / на n).

4. Функция расшифровки

Рисунок 5

Формула расшифровки: БУКВА АЛФАВИТА по номеру (остаток от деления ((ШИФР ^ d) / на n)).

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

Рисунок 6

Рисунок 7

Рисунок 8

шифрование программный криптографический информация

Программа содержит проверку ввода при вызове функций шифрования и расшифрования.

Рисунок 9

Рисунок 10

Полный код программы

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.Security.Cryptography;

using System.Numerics;

namespace RSA

{

public partial class Form1: Form

{

const string partFam = "КУЗ";

char[] alphavite = new char[]

{ '0', 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И','Й', 'К', 'Л', 'М', 'Н', 'О',

'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ь', 'Ы', 'Ъ', 'Э', 'Ю', 'Я'};

const Int64 p = 1069,

q = 2503;

BigInteger key_n = p * q,

key_d,

key_e;

public Form1()

{

InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)

{

BigInteger key_m = (p - 1) * (q - 1);

key_e = calcKey(key_m, 0);

key_d = calcKey(key_e, key_m, true);

label1.Text = "p = " + p.ToString();

label2.Text = "q = " + q.ToString();

label5.Text = key_e.ToString();

label4.Text = key_n.ToString();

label7.Text = key_d.ToString();

label6.Text = key_n.ToString();

}

private BigInteger calcKey(BigInteger a, BigInteger b, bool type = false)

{

if (type)

{

BigInteger ibl = b, v = 0, d = 1;

while (a > 0)

{

BigInteger t = ibl / a, x = a;

a = ibl % x;

ibl = x;

x = d;

d = v - t * x;

v = x;

}

v %= b;

if (v < 0)

v = (v + a) % b;

return v;

}

bool c = true;

BigInteger i = (BigInteger)Math.Truncate((decimal)Math.Sqrt((ulong)a));

while (c)

{

if (BigInteger.GreatestCommonDivisor(a, i) != 1)

i--;

else { c = false; }

}

return i;

}

private bool IsCoprime(BigInteger a, BigInteger b)

{

return a == b

? a == 1

: a > b

? IsCoprime(BigInteger.Subtract(a, b), b)

: IsCoprime(BigInteger.Subtract(b, a), a);

}

private void Button1_Click(object sender, EventArgs e)

{

List<string> ret_encode;

if (textBox1.Text.Length < 1)

return;

ret_encode = RSA_Encode(textBox1.Text, key_e, key_n);

textBox2.Text = String.Join(" ", ret_encode);

}

private void Button2_Click(object sender, EventArgs e)

{

string ret_decode;

if (textBox1.Text.Length < 1)

return;

ret_decode = RSA_Decode(new List<string>(textBox1.Text.Split(' ')), key_d, key_n);

textBox2.Text = String.Join("", ret_decode);

}

private List<string> RSA_Encode(string s, BigInteger e, BigInteger n)

{

List<string> result = new List<string>();

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

{

int index = Array.IndexOf(alphavite, s[i]);

if (index < 1)

{

MessageBox.Show("Исходная строка содержит символы вне алфавита шифрования!");

result.Clear();

return result;

}

result.Add(BigInteger.ModPow(new BigInteger(index), e, n).ToString());

}

return result;

}

private string RSA_Decode(List<string> input, BigInteger d, BigInteger n)

{

string result = "";

foreach (string item in input)

{

int formatItem;

if (!int.TryParse(item, out formatItem))

{

MessageBox.Show("Исходная строка содержит неверные символы!");

return result;

}

int index = Convert.ToInt32(BigInteger.ModPow(new BigInteger(formatItem), d, n).ToString());

if (index < 1 || index > (alphavite.Length - 1))

{

MessageBox.Show("Исходная строка содержит символы вне алфавита шифрования!");

result = "";

return result;

}

result += alphavite[index].ToString();

}

return result;

}

}

}

Размещено на Allbest.ru


Подобные документы

  • Разработка приложения для шифрования данных с помощью алгоритма DES5: процесс шифрования, расшифрования, получение ключей. Спецификация программы, процедуры и функции; описание интерфейса пользователя. Реализация задачи в среде программирования DELPHI.

    курсовая работа [812,6 K], добавлен 27.03.2012

  • Симметричные и асиметричные методы шифрования. Шифрование с помощью датчика псевдослучайных чисел. Алгоритм шифрования DES. Российский стандарт цифровой подписи. Описание шифрования исходного сообщения асимметричным методом с открытым ключом RSA.

    курсовая работа [101,1 K], добавлен 09.03.2009

  • Разработка программы, реализующей процедуры шифрования и расшифрования текста по стандарту DES (Data Encryption Standard). Структура алгоритма шифрования, схема выработки ключевых элементов. Использование криптографического программного средства.

    курсовая работа [1,7 M], добавлен 15.06.2013

  • Автоматизация процесса шифрования на базе современных информационных технологий. Криптографические средства защиты. Управление криптографическими ключами. Сравнение симметричных и асимметричных алгоритмов шифрования. Программы шифрования информации.

    курсовая работа [795,7 K], добавлен 02.12.2014

  • Сравнение производительности программных реализаций алгоритмов шифрования с оптимизациями под языки С и Java. История разработки, сущность, принципы шифрования и успехи в криптоанализе таких алгоритмов шифрования как AES, RC4, RC5, RC6, Twofish и Mars.

    реферат [1,3 M], добавлен 13.11.2009

  • Симметричные криптосистемы как способ шифрования, в котором для шифрования и расшифровывания применяется один и тот же криптографический ключ. Разбор и реализация шифрования алгоритма: простая и двойная перестановка, перестановка "магический квадрат".

    курсовая работа [3,3 M], добавлен 11.03.2013

  • Исследование системы распределения ключей на основе линейных преобразований. Описание компонентов сети конфиденциальной связи. Характеристика отечественного алгоритма шифрования данных. Обзор результатов расчетов криптостойкости алгоритма шифрования.

    контрольная работа [56,5 K], добавлен 26.09.2012

  • Принцип программной реализации классических криптографических методов. Метод шифрования с использованием таблицы Виженера. Создание текстового редактора "Блокнот", содержащего методы шифрования. Вербальный алгоритм и программа для методов шифрования.

    курсовая работа [2,0 M], добавлен 20.01.2010

  • Основные методы криптографической защиты информации. Система шифрования Цезаря числовым ключом. Алгоритмы двойных перестановок и магические квадраты. Схема шифрования Эль Гамаля. Метод одиночной перестановки по ключу. Криптосистема шифрования данных RSA.

    лабораторная работа [24,3 K], добавлен 20.02.2014

  • История криптографии. Сравнение алгоритмов шифрования, применение в операционной системе. Анализ продуктов в области пользовательского шифрования. Включение и отключение шифрования на эллиптических кривых. Использование хеш-функции. Электронная подпись.

    курсовая работа [492,6 K], добавлен 18.09.2016

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.