Статья по криптографии, которую я разместил немного ниже, объясняет базовые принципы сохранения конфиденциальности информации. Это конечно хорошо, но можно ли написать программу на 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, нужен пароль (ключ) и вектор инициализации. Чтобы расшифровать информацию, нужны тот же пароль и вектор инициализации.
На этом первая часть разработки программы закончена. Вторую допечатаю немного позже. Там уже будет код для обработчиков событий, код методов для кодирования, декодирования. Как говорится в фильмах – продолжение следует.
2 комментария:
Статья супер, мне очень помогла. Спасибо автору, я даже не думал, что работа с криптографией на платформе .NET может быть настолько простой)))
Побольше бы таких статей.
Спасибо автору. Статья очень помогла.
Отправить комментарий