вторник, 5 января 2010 г.

Программа шифрования алгоритмом TripleDES. Часть первая


Статья по криптографии, которую я разместил немного ниже, объясняет базовые принципы
сохранения конфиденциальности информации. Это конечно хорошо, но можно ли написать
программу на C# так, чтобы она кодировала наш текст, и соответственно декодировала
его?


Да. И достаточно просто.


Я написал программу, которая демонстрирует алгоритм шифрования TripleDES. Немного
об алгоритме: алгоритм симметричный, то есть шифруем и дешифруем текст, при помощи
одного и того же пароля (ключа). Если верить Википедии, то –


Triple DES (3DES) — симметричный блочный шифр, созданный Уитфилдом Диффи,
Мартином Хеллманом и Уолтом Тачманном в 1978 году на основе алгоритма DES, с целью
устранения главного недостатка последнего — малой длины ключа (56 бит), который
может быть взломан методом полного перебора ключа. Скорость работы 3DES в 3 раза
ниже, чем у DES, но криптостойкость намного выше — время, требуемое для криптоанализа
3DES, может быть в миллиард раз больше, чем время, нужное для вскрытия DES. (c)Wikipedia


В нашей программе мы будем использовать класс TripleDESCryptoServiceProvider.
Он определяет объект-оболочку для доступа к реализации алгоритма TripleDES, предоставляемой
поставщиком служб шифрования (CSP). Для использования этого класса нужно использовать
пространство имен System.Security.Cryptography.


using System.Security.Cryptography;


Поставщик служб шифрования (Cryptography Service Provider, CSP) - это посредник
между операционной системой, которая может управлять им с помощью стандартных функций
CryptoAPI, и исполнителем криптографических операций(это может быть как программа,
так и аппаратный комплекс). программа, так и аппаратный комплекс).


Итак, создаем пустой проект WindowsFormsApplication и называем его TripleDES. На
форме Form1 размещаем такие контролы:


- TabControl (находим в ToolBox-Containers)


- Button – на первой закладке – 3, на второй – 2 шт.


-TextBox – на первой закладке – 4, на второй – 3 шт.


-Label – на первой закладке – 4, на второй – 5 шт.


Смотрим на рисунки:





После этого каждому элементу задаем свойство текст такие:





Теперь немного объясню, что зачем.


Вкладка «Шифрование»


Здесь мы можем выбрать текст из файла, или же напечатать текст в TextBox для текста
(большой такой). Если вы открываете текст из текстового файла (*.doc не поддерживаются),
тогда текст из файла автоматически отобразится в TextBox для текста.


Пароль – нужен фиксированной длинны, которая равна 24 буквам. На одну букву приходится
8 байт памяти, и в итоге пароль получается длинной в 24 * 8 = 192 байта. В нашем
случае может использоваться пароль любой длинны, если только он меньше 24 символов.
В моей программе короткий пароль дублируется и дописывается к уже существующему
несколько раз. То есть вы ввели «ключ», а программа сделает «ключключключключключ».


Вектор инициализации (IV) – нужен для задания параметров блочного шифрования. Он
генерируется при шифровании, а также генерируется совершенно другим при дешифровании.
Поэтому мы запоминаем его в локальной переменной IVector.


protected byte[] IVector = null;

Путь куда шифруем – путь, куда сохраняем текстовый файл.


Вкладка «Дешифрование»


Путь к файлу – путь к файлу для дешифровки. Вектор (IV) – берем с переменной IVector.
Для наглядности отображает его через метку label9.

// Создаем новый TripleDESCryptoServiceProvider обьект
// для генерирования вектора инициализации (IV).
TripleDESCryptoServiceProvider tDESalg = new TripleDESCryptoServiceProvider();

// Для наглядности выводим значение вектора инициализации
string temp = null;

for (
int i = 0; i < tDESalg.IV.Length; i++)
{
temp += tDESalg.IV[i].ToString();
}

tbVector.Text = temp;
lVector.Text = temp;

// Запоминаем вектор в локальной переменной
IVector IVector = tDESalg.IV;



Дешифрованная инф. – наш текст после дешифровки.

Подведем итоги – чтобы зашифровать информацию алгоритмом TripleDES, нужен пароль
(ключ) и вектор инициализации. Чтобы расшифровать информацию, нужны тот же пароль
и вектор инициализации.


На этом первая часть разработки программы закончена. Вторую допечатаю немного позже.
Там уже будет код для обработчиков событий, код методов для кодирования, декодирования.
Как говорится в фильмах – продолжение следует.

понедельник, 4 января 2010 г.

Видео-уроки по C#




Недавно наткнулся на сайт techdays.ru. Там ну просто очень много информации по программированию на C# и других языках программирования. Сайт представляет собос базу видео-докладов на различные темы. Можно найти информацию по работе с базами данных, ASP.NET, Ajax.

techdays.ru