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