Вступление
Шифр Цезаря — один из древнейших шифров. При шифровании каждый символ заменяется другим, отстоящим от него в алфавите на фиксированное число позиций. Шифр Цезаря можно классифицировать как шифр подстановки, при более узкой классификации — шифр простой замены.
.
Шифр назван в честь римского императора Гая Юлия Цезаря, использовавшего его для секретной переписки. Естественным развитием шифра Цезаря стал шифр Виженера. С точки зрения современного криптоанализа, шифр Цезаря не имеет приемлемой стойкости.
Пример
Шифрование с использованием ключа k = 3. Буква С «сдвигается» на три буквы вперед и становится буквой «Ф». Твердый знак, перемещённый на три буквы вперед, становится буквой «э», и так далее:
Оригинальный текст:
Съешь же ещё этих мягких французских булок, да выпей чаю.
Шифрованный текст
Фэзыя йз зьи ахлш пвёнлш чугрщцкфнлш дцосн, жг еютзм ъгб.
Исходный программный код
В программе используется переменная в которой забиты все символы англ. и русского алфавита, знаки препинания, пробел и символ новой строки.
public static string abc = @"`1234567890-=\][poiuytrewqasdfghjkl;'/., mnbvcxzQWERTYUIOPLKJHGFDSAZXCVBNMйцукенгшщзхъэждлорпавыфячсмитьбюЙЦУКЕНГШЩЗХЪЭЖДЛОРПАВЫФЯЧСМИТЬБЮ" + Environment.NewLine;
Символ '@'нужен для отключения '\]' последовательности символов.
Вся логика программы сосредоточена в этой строчке:
Data2 += abc[abc.IndexOf(Data[i]) + key];
В переменную Data2 мы заносим шифрованную букву, которую вычисляем из ключа key.
Пример
Hello world!
Первая буква (при i = 1) - 'H'. Ищем под каким номером она стоит в нашем алфавите abc - abc.IndexOf('H'). Допустим под номером 30. К этому числу + 3 = 33. Дальше присваиваем Data2 += abc[33];
Исходники лежат здесь -
скачать с upload.com.ua - http://upload.com.ua/get/901647108/ и здесь - скачать с rapidgator.net - http://rapidgator.net/133591/Caesar_cipher_implementation.rar.html
Исходники c# скачать - блог Павел Белоус - блог по программированию на C# .NET, C++
Немного о идее
Сегодня исходники по C# скачать бесплатно практически не возможно. Но мне пришла идея разместить исходники программ, что я делал в универе, здесь на сайте. Скачать можно с файлообменника, просто нужно подождать минуту - и вуааля - скачивайте и сдавайте вашему преподавателю, или эксперементируйте с исходниками... Оставляйте комментарии или давайте идеи - буду пробовать написать и выложить исходники. Также планирую в дальнейшем выложить для скачивания исходники по C++. Вообщем пожелайте мне удачи. :)
Показаны сообщения с ярлыком C# sources. Показать все сообщения
Показаны сообщения с ярлыком C# sources. Показать все сообщения
четверг, мая 20, 2010
вторник, мая 18, 2010
Генератор паролей RNGCryptoServiceProvider
Автор:
Pavel Bilous
Вступление
Все люди пользуются интернетом. Или вскоре начнут им пользоватся. А зайдя в интернет они полюбому будут ичпользовать сервисы типа почты, одноклассников, интернет магазинов или вебмани (web money). А здесь везде и всюду нужно вписывать свой пароль. А надежный пароль сходу так и не придумаешь. Но если пароль не надежен, то и система где его используют не может считатся надежной.
Надежным пароль считается, когда он:
- не состоит из простых слов типа "pavel", "armagedon" и др.
- содержит цифры,
- содержит знаки препинания,
- содержит большие и маленькие буквы.
Вот мне и пришла идея использовать стандартные средства C#, что-бы сделать простой генератор паролей. Все преимущества такой программы налицо - нажал на кнопочку - вот тебе надежный пароль, притом в программе можно выбрать любую длину. Потом можно записать его куда-нибудь в надежное место, или просто скинуть в блокнот себе на компе, а файл для надежности закодировать.
Общая инфа
В программе используется пространство имен System.Security.Cryptography. Оно предоставляет криптографические службы, включающие безопасное кодирование и декодирование данных, а также целый ряд других функций, таких как хэширование, генерация случайных чисел и проверка подлинности сообщений.
Программа выглядит следующим образом:
Все просто - выбираем длину пароля и жмем "Roll Dice".
Программный код (исходники)
Form1.cs
using System;
using System.Windows.Forms;
namespace Char_generator_for_VS2008
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click_1(object sender, EventArgs e)
{
if (Convert.ToInt32(textBox2.Text) < 35)
{
try
{
textBox1.Clear();
byte[] temp = Generator.RollDice(Convert.ToInt32(textBox2.Text));
for (int i = 0; i < temp.Length; i++)
{
textBox1.Text += (char)temp[i];
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
else
MessageBox.Show("Введите число меньше 35!!!");
}
private void Form1_Load(object sender, EventArgs e)
{
textBox2.Text = "16";
}
}
}
Мы вызываем метод RollDice() класса Generator. Програмный код этого класса:
Generator.cs
using System.Security.Cryptography;
namespace Char_generator_for_VS2008
{
class Generator
{
public static byte[] RollDice(int passLenght)
{
byte[] randomNumber = new byte[passLenght];
byte[] password = new byte[passLenght];
// Create a new instance of the RNGCryptoServiceProvider.
RNGCryptoServiceProvider Gen = new RNGCryptoServiceProvider();
// Fill the array with a random value.
Gen.GetBytes(randomNumber);
for (int i = 0; i < randomNumber.Length; i++)
{
if ((int)randomNumber[i] > 48 && (int)randomNumber[i] < 57 ||
(int)randomNumber[i] > 65 && (int)randomNumber[i] < 90 ||
(int)randomNumber[i] > 97 && (int)randomNumber[i] < 122)
{
password[i] = randomNumber[i];
}
else
{
Gen.GetBytes(randomNumber);
i--;
}
}
return password;
}
}
}
Логика следующая:
- Генерируем число от 0 до 256
- Если сгенерированное число входит в интервалы
от 48 до 57,
от 65 до 90 и
от 97 до 122,
сохраняем его в текстбокс.
В противном случае снова генерируем число от 0 до 256.
Скачать исходники можно здесь - http://upload.com.ua/get/901646946/
или здесь - http://rapidgator.net/133533/Char_generator_for_VS2008.rar.html
Все люди пользуются интернетом. Или вскоре начнут им пользоватся. А зайдя в интернет они полюбому будут ичпользовать сервисы типа почты, одноклассников, интернет магазинов или вебмани (web money). А здесь везде и всюду нужно вписывать свой пароль. А надежный пароль сходу так и не придумаешь. Но если пароль не надежен, то и система где его используют не может считатся надежной.
Надежным пароль считается, когда он:
- не состоит из простых слов типа "pavel", "armagedon" и др.
- содержит цифры,
- содержит знаки препинания,
- содержит большие и маленькие буквы.
Вот мне и пришла идея использовать стандартные средства C#, что-бы сделать простой генератор паролей. Все преимущества такой программы налицо - нажал на кнопочку - вот тебе надежный пароль, притом в программе можно выбрать любую длину. Потом можно записать его куда-нибудь в надежное место, или просто скинуть в блокнот себе на компе, а файл для надежности закодировать.
Общая инфа
В программе используется пространство имен System.Security.Cryptography. Оно предоставляет криптографические службы, включающие безопасное кодирование и декодирование данных, а также целый ряд других функций, таких как хэширование, генерация случайных чисел и проверка подлинности сообщений.
Программа выглядит следующим образом:
Все просто - выбираем длину пароля и жмем "Roll Dice".
Программный код (исходники)
Form1.cs
using System;
using System.Windows.Forms;
namespace Char_generator_for_VS2008
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click_1(object sender, EventArgs e)
{
if (Convert.ToInt32(textBox2.Text) < 35)
{
try
{
textBox1.Clear();
byte[] temp = Generator.RollDice(Convert.ToInt32(textBox2.Text));
for (int i = 0; i < temp.Length; i++)
{
textBox1.Text += (char)temp[i];
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
else
MessageBox.Show("Введите число меньше 35!!!");
}
private void Form1_Load(object sender, EventArgs e)
{
textBox2.Text = "16";
}
}
}
Мы вызываем метод RollDice() класса Generator. Програмный код этого класса:
Generator.cs
using System.Security.Cryptography;
namespace Char_generator_for_VS2008
{
class Generator
{
public static byte[] RollDice(int passLenght)
{
byte[] randomNumber = new byte[passLenght];
byte[] password = new byte[passLenght];
// Create a new instance of the RNGCryptoServiceProvider.
RNGCryptoServiceProvider Gen = new RNGCryptoServiceProvider();
// Fill the array with a random value.
Gen.GetBytes(randomNumber);
for (int i = 0; i < randomNumber.Length; i++)
{
if ((int)randomNumber[i] > 48 && (int)randomNumber[i] < 57 ||
(int)randomNumber[i] > 65 && (int)randomNumber[i] < 90 ||
(int)randomNumber[i] > 97 && (int)randomNumber[i] < 122)
{
password[i] = randomNumber[i];
}
else
{
Gen.GetBytes(randomNumber);
i--;
}
}
return password;
}
}
}
Логика следующая:
- Генерируем число от 0 до 256
- Если сгенерированное число входит в интервалы
от 48 до 57,
от 65 до 90 и
от 97 до 122,
сохраняем его в текстбокс.
В противном случае снова генерируем число от 0 до 256.
Скачать исходники можно здесь - http://upload.com.ua/get/901646946/
или здесь - http://rapidgator.net/133533/Char_generator_for_VS2008.rar.html
Ярлыки:
исходники c# скачать,
C#,
C# sources
понедельник, января 25, 2010
MyNotepad
Автор:
Pavel Bilous
Блокнот - очень удобный и быстрый инструмент для редактирования текста. Вот один из примеров как можно его написать.
#region RegionName
#endregion
для разделения методов и событий. Очено удобно и помагает какбы охватить структуру программы одним взглядом. Хорошим тоном в программировании является разделение программы на поля, методы, события, опции и т.д.
В общем Notepad был написан где-то за два часа. Везде и всюду использовались свойства TextBox'а. В частности свойство для смены шрифта - Font. А также окно выбора шрифта - fontDialog.
Кроме этого диалога использовались еще диалоги - openFileDialog и saveFileDialog. Также очень удобный и полезный элемент - menuStrip. Представляет собой простую менюшку.
Вот внешний вид блокнота:
Скачать исходники можно здесь - http://rapidgator.net/45551/MyNotepad_0.1.rar.html
Ярлыки:
блокнот,
исходники c# скачать,
C#,
C# sources,
TextBox
пятница, января 08, 2010
TripleDES. Часть вторая
Автор:
Pavel Bilous
Нашел таки время на продолжение статьи. На тему кодирование TripleDES.
Итак у нас есть готовая форма с контролами, осталось только "прицепить" к кнопкам обработчики событий. Но это еще не все. В моей программе я использую отдельный файл - CryptText.cs - для методов шифрования и дешифрования.
"Шифрование"
Програмный код для обработчиков событий:
- button1
Заметки:
Здесь мы вместо использования контрола OpenFileDialog напрямую создаем экземпляр класса OpenFileDialog. Также используем свойство Filter для открытия только текстовых файлов. Содержимое окна OpenFileDialog отфильтровывается так, что будут показаны только папки и текстовые файлы. Далее мы одной строчкой открываем текстовый файл и читаем его с начала в конец. Здесь я использовал слабую ссылку на обьект FileInfo.
- button2
Тот же код, но для сохранения.
- button3
Заметки: Для использования класса TripleDESCryptoServiceProvider нужно подключит пространство имен
Для хранения вектора инициализации я использовал переменную IVector. Обьявляется она сразу после
Здесь как вы видете используется метод EncryptTextToFile() из класса CryptText. Как я уже говорил, этот клас находится в отдельном модуле (или отдельном файле). Также используется конструкция try - catch для обработки исключений и их вывода на екран в виде MessageBox.
"Дешифрование"
Програмный код для обработчиков событий:
- button4
OpenFileDialog ofd = new OpenFileDialog();
- button5
Теперь добавляем в проект класс таким образом: открываем SolutionExplorer, клацаем по MyTripleDES правой
кнопкой мышки и жмем добавить-класс (Add-Class). Называем его CryptText.
Не забываем подключить в наш только что созданный класс
Далее в класс вставляем код:
Осталось пару штрихов. Создаем обработчик события на загрузку формы Form1. Вставляем код:
textBox3.Text = @"C:\Encoded.txt";
Organize Usings - Remove Unused Usings
Вуаля. Наша программа готова !!! Можна тестировать. Отзывы и советы пишите в
комментарии.
Исходники качаем отсюдова hhttp://www.megaupload.com/?d=1SELPDBQ.
Итак у нас есть готовая форма с контролами, осталось только "прицепить" к кнопкам обработчики событий. Но это еще не все. В моей программе я использую отдельный файл - CryptText.cs - для методов шифрования и дешифрования.
"Шифрование"
Програмный код для обработчиков событий:
- button1
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Txt files (*.txt)|*.txt|All files (*.*)|*.*";
ofd.ShowDialog();
if (ofd.FileName != "")
{
tbText.Text = new FileInfo(ofd.FileName).OpenText().ReadToEnd();
}
Заметки:
Здесь мы вместо использования контрола OpenFileDialog напрямую создаем экземпляр класса OpenFileDialog. Также используем свойство Filter для открытия только текстовых файлов. Содержимое окна OpenFileDialog отфильтровывается так, что будут показаны только папки и текстовые файлы. Далее мы одной строчкой открываем текстовый файл и читаем его с начала в конец. Здесь я использовал слабую ссылку на обьект FileInfo.
- button2
SaveFileDialog sfd = new SaveFileDialog();
sfd.InitialDirectory = "C:\\";
sfd.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
sfd.ShowDialog();
tbPath.Text = sfd.FileName;
Тот же код, но для сохранения.
- button3
try
{
// Создаем новый TripleDESCryptoServiceProvider обьект
// для генерирования вектора инициализации (IV).
TripleDESCryptoServiceProvider tDESalg = new TripleDESCryptoServiceProvider();
// Для наглядности выводим значение вектора инициализации
string temp = null;
for (int i = 0; i < tDESalg.IV.Length; i++)
{
temp += tDESalg.IV[i].ToString();
}
textBox4.Text = temp;
label9.Text = temp;
// Запоминаем вектор в локальной переменной IVector
IVector = tDESalg.IV;
// Строка для шифрования
string sData = textBox1.Text;
// Получаем ключ, преобразовываем в массив байтов и
// дополняем до длинны 24. Не больше и не меньше.
string strKey = textBox2.Text;
byte[] bKey = new byte[24];
for (int i = 0, j = 0; i < 24; i++, j++)
{
if (j == strKey.Length)
j = 0;
bKey[i] = (byte)strKey[j];
}
// Указываем файл, куда будем шифровать
string FileName = textBox3.Text;
// Шифруем текст в файл.
// При этом указываем имя файла, ключ и вектор инициализации.
CryptText.EncryptTextToFile(sData, FileName, bKey, tDESalg.IV);
// Сообщаем о результате
MessageBox.Show("Текст успешно зашифрован !!!");
}
catch (Exception exc)
{
MessageBox.Show(exc.Message);
}
Заметки: Для использования класса TripleDESCryptoServiceProvider нужно подключит пространство имен
using System.Security.Cryptography;
Для хранения вектора инициализации я использовал переменную IVector. Обьявляется она сразу после
protected byte[] IVector = null;
Здесь как вы видете используется метод EncryptTextToFile() из класса CryptText. Как я уже говорил, этот клас находится в отдельном модуле (или отдельном файле). Также используется конструкция try - catch для обработки исключений и их вывода на екран в виде MessageBox.
"Дешифрование"
Програмный код для обработчиков событий:
- button4
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Txt files (*.txt)|*.txt|All files (*.*)|*.*";
ofd.ShowDialog();
if (ofd.FileName != "")
{
textBox5.Text = new FileInfo(ofd.FileName).FullName;
}
- button5
try
{
// Создаем новый TripleDESCryptoServiceProvider обьект
// для генерирования вектора инициализации (IV).
TripleDESCryptoServiceProvider tDESalg = new TripleDESCryptoServiceProvider();
// Получаем ключ, преобразовываем в массив байтов и
// дополняем до длинны 24. Не больше и не меньше.
string strKey = textBox6.Text;
byte[] bKey = new byte[24];
for (int i = 0, j = 0; i < 24; i++, j++)
{
if (j == strKey.Length)
j = 0;
bKey[i] = (byte)strKey[j];
}
// Указываем файл для дешифрования
string FileName = textBox5.Text;
// Дешифруем текст из файла.
// При этом указываем имя файла, ключ и вектор инициализации IVector.
textBox7.Clear();
textBox7.Text += CryptText.DecryptTextFromFile(FileName, bKey, IVector);
// Сообщаем о результате
MessageBox.Show("Текст успешно дешифрован !!!");
}
catch (Exception exc)
{
MessageBox.Show(exc.Message);
}
Теперь добавляем в проект класс таким образом: открываем SolutionExplorer, клацаем по MyTripleDES правой
кнопкой мышки и жмем добавить-класс (Add-Class). Называем его CryptText.
Не забываем подключить в наш только что созданный класс
using System.Security.Cryptography;
using System.IO;
using System.Windows.Forms;
Далее в класс вставляем код:
// Конструктор
public CryptText() { }
///
/// Метод шифрует текст в файл
///
/// Метод шифрует текст в файл
///
///
Текст для шифрования
///
Полный путь к файлу
///
Ключ (пароль)
///
Вектор инициализации
public static void EncryptTextToFile(String Data, String FileName, byte[] Key, byte[] IV)
{
try
{
// Create or open the specified file.
FileStream fStream = File.Open(FileName, FileMode.OpenOrCreate);
// Create a CryptoStream using the FileStream
// and the passed key and initialization vector (IV).
CryptoStream cStream = new CryptoStream(fStream,
new TripleDESCryptoServiceProvider().CreateEncryptor(Key, IV),
CryptoStreamMode.Write);
// Create a StreamWriter using the CryptoStream.
StreamWriter sWriter = new StreamWriter(cStream);
// Write the data to the stream
// to encrypt it.
sWriter.WriteLine(Data);
// Close the streams and
// close the file.
sWriter.Close();
cStream.Close();
fStream.Close();
}
catch (CryptographicException e)
{
MessageBox.Show("A Cryptographic error occurred: {0}", e.Message);
}
catch (UnauthorizedAccessException e)
{
MessageBox.Show("A file access error occurred: {0}", e.Message);
}
}
///
/// Метод дешифрует текст из файла
///
/// Метод дешифрует текст из файла
///
///
Полный путь к файлу
///
Ключ (пароль)
///
Вектор инициализации
/// Текст в дешифрованном виде
public static string DecryptTextFromFile(String FileName, byte[] Key, byte[] IV)
{
try
{
// Create or open the specified file.
FileStream fStream = File.Open(FileName, FileMode.OpenOrCreate);
// Create a CryptoStream using the FileStream
// and the passed key and initialization vector (IV).
CryptoStream cStream = new CryptoStream(fStream,
new TripleDESCryptoServiceProvider().CreateDecryptor(Key, IV),
CryptoStreamMode.Read);
// Create a StreamReader using the CryptoStream.
StreamReader sReader = new StreamReader(cStream);
// Read the data from the stream
// to decrypt it.
string val = sReader.ReadToEnd();
// Close the streams and
// close the file.
sReader.Close();
cStream.Close();
fStream.Close();
// Return the string.
return val;
}
catch (CryptographicException e)
{
MessageBox.Show("A Cryptographic error occurred: {0}", e.Message);
return null;
}
catch (UnauthorizedAccessException e)
{
MessageBox.Show("A file access error occurred: {0}", e.Message);
return null;
}
}
Осталось пару штрихов. Создаем обработчик события на загрузку формы Form1. Вставляем код:
textBox3.Text = @"C:\Encoded.txt";
textBox2.Text = "key";
textBox6.Text = "key";
Удаляем пространства имен, которые не используем. Для этого правой кнопкой мышки клацаем по коду и жмем Organize Usings - Remove Unused Usings
Вуаля. Наша программа готова !!! Можна тестировать. Отзывы и советы пишите в
комментарии.
Исходники качаем отсюдова hhttp://www.megaupload.com/?d=1SELPDBQ.
Ярлыки:
исходники c# скачать,
C#,
C# sources,
DES
вторник, января 05, 2010
TripleDES. Часть первая
Автор:
Pavel Bilous
Статья по криптографии, которую я разместил немного ниже, объясняет базовые принципы сохранения конфиденциальности информации. Это конечно хорошо, но можно ли написать программу на 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, нужен пароль (ключ) и вектор инициализации. Чтобы расшифровать информацию, нужны тот же пароль и вектор инициализации.
На этом первая часть разработки программы закончена. Вторую допечатаю немного позже. Там уже будет код для обработчиков событий, код методов для кодирования, декодирования. Как говорится в фильмах – продолжение следует.
пятница, января 01, 2010
Шифрование с открытым ключом
Автор:
Pavel Bilous
При шифровании с открытым ключом используются закрытый ключ, который должен храниться в секрете от неправомочных пользователей, а также открытый ключ, который может предоставляться кому угодно. Открытый и закрытый ключи математически взаимосвязаны; данные, зашифрованные с помощью открытого ключа, можно расшифровать исключительно с помощью соответствующего закрытого ключа, а цифровая подпись данных, подписанных с помощью закрытого ключа, может быть проверена только с помощью соответствующего открытого ключа. Открытый ключ может быть предоставлен любому лицу; он используется для шифрования данных, которые должны быть отправлены хранителю закрытого ключа. Алгоритмы шифрования с открытым ключом также известны как асимметричные алгоритмы, потому что для шифрования данных требуется один ключ, а для расшифровки — другой ключ. Оба ключа должны быть уникальными для сеанса связи. Однако хотя это требование распространяется на симметричные алгоритмы, на практике асимметричные ключи обычно используются в течение длительного срока. Шифрование с открытым ключом имеет намного большее пространство ключей, т. е. диапазон возможных значений ключа, и поэтому является менее восприимчивым к атакам методом полного перебора, когда проверяется каждое возможное значение ключа. Открытые ключи можно легко распространять, поскольку они не требуют особой защиты при условии, что существует некий способ установления подлинности источника. Некоторые алгоритмы шифрования с открытым ключом (такие как RSA и DSA, но не Diffie-Hellman) могут быть использованы для создания цифровых подписей, служащих для подтверждения идентичности лица, от которого исходят данные. Однако алгоритмы шифрования с открытым ключом являются весьма медленными (по сравнению с алгоритмами шифрования с закрытым ключом) и не предназначены для шифрования больших объемов данных. Использование шифрования с открытым ключом имеет смысл только при передаче очень малых массивов данных. Обычно шифрование с открытым ключом применяется для того, чтобы зашифровать ключ и вектор инициализации, которые будут использоваться при шифровании с закрытым ключом. После передачи ключа и вектора инициализации используется уже шифрование с закрытым ключом. (c)MSDN
Подписаться на:
Сообщения (Atom)

