Академический Документы
Профессиональный Документы
Культура Документы
Лабораторная работа № 5
Методы криптографии. Реализация режимов стандарта DES
Тула 2015
1. Цель работы
Приобретение навыков шифрования и дешифрования сообщений и
файлов любого вида на основе стандарта DES.
2. Задание на работу
Вариант № 3. Кодирование и декодирование в режиме «Цифровая
обратная связь (Cipher Feedback) – CFB».
3. Теоретическая справка
Самым распространенным и наиболее известным алгоритмом
симметричного шифрования является DES (Data Encryption Standard).
Алгоритм был разработан в 1977 году.
Алгоритм шифрования DES использует ключ длиной 56 бит, при этом
блоки состоят из 64 бит каждый и используется сеть Фейштеля, состоящая из
шестнадцати циклов. При шифровании данных используются как линейные,
так и нелинейные преобразования.
Для наиболее полного удовлетворения всем требованиям,
предъявляемым к коммерческим системам шифрования, реализованы
несколько режимов работы алгоритма DES. Наиболее широкое
распространение получили режимы:
электронный шифроблокнот (Electronic Codebook ) - ECB;
цепочка цифровых блоков (Cipher Block Chaining) - CBC;
цифровая обратная связь (Cipher Feedback) - CFB;
внешняя обратная связь (Output Feedback) - OFB.
DES-CFB
В этом режиме размер блока может отличаться от 64 бит. Исходный
файл M считывается последовательными t-битовыми блоками (t <= 64): M =
M(1)M(2)...M(n) (остаток дописывается нулями или пробелами).
2
64-битовый сдвиговый регистр (входной блок) вначале содержит
вектор инициализации IV, выравненный по правому краю. Для каждого
сеанса шифрования используется новый IV.
Для всех i = 1...n блок шифртекста C(i) определяется следующим
образом: C(i) = M(i) xor P(i-1), где P(i-1) - старшие t бит операции DES(С(i-
1)), причем C(0) = IV.
Обновление сдвигового регистра осуществляется путем удаления его
старших t бит и дописывания справа C(i).
Восстановление зашифрованных данных также не представляет труда:
P(i-1) и C(i) вычисляются аналогичным образом и M(i) = C(i) xor P(i-1) .
4. Алгоритм программы
На рисунке 1 показана схема работы алгоритма DES в режиме CFB.
5. Текст программы
Ниже приведен полный текст программы, реализующей кодирование и
декодирование файлов в режиме CFB.
3
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO;
namespace pasoib_5_1
{
class Program
{
static void Main(string[] args)
{
try
{
//Меню
Console.WriteLine("Добро пожаловать! Выберите действие:");
Console.WriteLine("1 - Шифрование файла");
Console.WriteLine("2 - Расшифрование файла");
int v;
v = Convert.ToInt32(Console.ReadLine());
Console.WriteLine();
if (v == 1) //Шифрование
{
string FileName; //Путь к файлу, который нужно зашифровать
string Encrypted; //Путь к зашифрованному файлу
string Klutch; //Ключ
Console.WriteLine("Введите ключ");
Klutch = string.Empty;
Klutch = Console.ReadLine();
if (v == 2) //Расшифрование
{
string Encrypted; //Путь к зашифрованному файлу
string Decrypted; //Путь к расшифрованному файлу
string Klutch; //Ключ
Console.WriteLine("Введите ключ");
Klutch = string.Empty;
4
Klutch = Console.ReadLine();
//Шифрование
static void Coder_DES_CFB(string FileName, string Encrypted, string Klutch)
{
try
{
int LenKlutch = Klutch.Length;
byte[] KeyBytes0 = new byte[Klutch.Length * sizeof(char)];
System.Buffer.BlockCopy(Klutch.ToCharArray(), 0, KeyBytes0, 0,
KeyBytes0.Length);
byte[] KeyBytes = new byte[Klutch.Length];
int j = 0;
for (int i = 0; i < Klutch.Length * sizeof(char); i = i + 2)
{
KeyBytes[j] = KeyBytes0[i];
j++;
}
cStream.Write(Mass, 0, Mass.Length);
cStream.FlushFinalBlock();
cStream.Close();
mStream.Close();
5
for (long i = 0; i < Mass1.Length; i++)
{
outp.WriteByte(Mass1[i]);
}
outp.Close();
}
catch (CryptographicException exc)
{
Console.WriteLine("Произошла ошибка: {0}", exc.Message);
Console.ReadLine();
}
}
//Расшифрование
static void Decoder_DES_CFB(string Encrypted, string Decrypted, string Klutch)
{
try
{
int LenKlutch = Klutch.Length;
byte[] KeyBytes0 = new byte[Klutch.Length * sizeof(char)];
System.Buffer.BlockCopy(Klutch.ToCharArray(), 0, KeyBytes0, 0,
KeyBytes0.Length);
byte[] KeyBytes = new byte[Klutch.Length];
int j = 0;
for (int i = 0; i < Klutch.Length * sizeof(char); i = i + 2)
{
KeyBytes[j] = KeyBytes0[i];
j++;
}
6
{
Console.WriteLine("Произошла ошибка: {0}", exc.Message);
Console.ReadLine();
}
}
}
}
6. Инструкция пользователю
Программа, созданная при выполнении данной лабораторной работы,
осуществляет кодирование и декодирование файлов любого типа по
алгоритму DES в режиме «Цифровая обратная связь (Cipher Feedback) –
CFB».
При запуске программы на экран выводится меню: «Добро пожаловать!
Выберите действие: 1 – Шифрование файла; 2 – Расшифрование файла». При
выборе «1» осуществляется шифрование заданного файла по алгоритму DES
в режиме CFB. Необходимо задать следующую информацию: имя с полным
путем исходного шифруемого файла (пример ввода: D:\\test\p1.txt); имя с
полным путем результирующего зашифрованного файла (пример ввода:
D:\\test\p2.txt); 8-и символьный криптографический ключ для шифрования. В
случае успешного шифрования файла выводится сообщение: «Шифрование
прошло успешно», иначе выводится сообщение «Произошла ошибка» и
описание ошибки.
При выборе «2» осуществляется расшифрование заданного файла.
Необходимо задать следующую информацию: имя с полным путем
зашифрованного файла (пример ввода: D:\\test\p2.txt); имя с полным путем
результирующего расшифрованного файла (пример ввода: D:\\test\p3.txt); 8-и
символьный ключ для расшифрования. В случае успешного выполнения
расшифрования файла выводится сообщение: «Расшифрование прошло
успешно», иначе выводится сообщение «Произошла ошибка» и описание
ошибки.
7
7. Инструкция программисту
Программа, созданная при выполнении данной лабораторной работы,
осуществляет кодирование и декодирование файлов любого типа по
алгоритму DES в режиме «Цифровая обратная связь (Cipher Feedback) –
CFB».
Программа содержит следующие функции:
void Coder_DES_CFB(string FileName, string Encrypted, string Klutch) –
шифрование файла. Аргументы функции: string FileName - имя с полным
путем исходного шифруемого файла, string Encrypted - имя с полным путем
результирующего зашифрованного файла, string Klutch - 8-и символьный
криптографический ключ;
void Decoder_DES_CFB(string Encrypted, string Decrypted, string Klutch)
– расшифрование файла. Аргументы функции: string Encrypted - имя с
полным путем зашифрованного файла, string Decrypted - имя с полным путем
результирующего расшифрованного файла, string Klutch - 8-и символьный
ключ.
8
Рисунок 3 – Шифрование файла
9
Рисунок 7 – Расшифрованный файл p3.txt
9. Вывод
В процессе выполнения лабораторной работы мы приобрели навыки
шифрования и дешифрования сообщений и файлов любого вида на основе
стандарта DES.
Алгоритм DES достаточно надежен. Он обладает большой гибкостью
при реализации различных приложений обработки данных, так как каждый
блок данных шифруется независимо от других. Это позволяет
расшифровывать отдельные блоки зашифрованных сообщений или
структуры данных, а, следовательно, открывает возможность независимой
передачи блоков данных или произвольного доступа к зашифрованным
данным. Алгоритм может реализовываться как программным, так и
аппаратным способами. Существенный недостаток этого алгоритма - малая
длина ключа.
10