
- •Кафедра «Компьютерные технологии и системы»
- •Создание органайзера для ведения записей с функцией шифрования
- •Тема: Создание органайзера для ведения записей с функцией шифрования
- •1. Конструкторский раздел………………………………………….5
- •2. Технологический раздел…………………………………………8
- •3. Руководство пользователя………………………………..…..11
- •2. Технологический раздел
- •2.1. Выбор языка и среды программирования.
- •2.2. Блок-схема алгоритма.
- •2.3. Хранение и обмен данными в программе.
- •2.4. Разработка и отладка текста программы.
- •2.5. Разработка интерфейс пользователя.
- •2.6. Тестирование программы.
- •3. Руководство пользователя
- •3.1. Рекомендуемые требования к аппаратуре.
- •3.2. Рекомендуемые требования к программному обеспечению.
- •3.3. Порядок работы с программой.
- •3.4. Примеры использования программы.
3. Руководство пользователя
3.1. Рекомендуемые требования к аппаратуре.
Процессор: Intel Pentium III и выше
Память: 10Мб
Оперативная память: от 256 Мб
Манипулятор мышь
3.2. Рекомендуемые требования к программному обеспечению.
OC: Windows XP/Vista/7
Платформа .NET 4.0
3.3. Порядок работы с программой.
В работе программы можно выделить 2 направления: создание записей и шифрование.
Создание дневника.
Для начала нужно зарегистрироваться в программе, для этого нажмите Файл – Новый пользователь. Введите логин и пароль. Теперь они сохранены в системе. Совершите вход, нажав Файл – Вход. Введите указанные вами ранее логин и пароль. Нажмите ОК. Затем, чтобы подтвердить свою авторизацию, нажмите Файл – Подтвердить авторизацию. Теперь вас стала доступной часть меню под названием «Дневник». Выбрав Дневник – Новая запись, вы увидите новое окно, в котором можете создать запись, заполнив соответствующие поля и нажав кнопку «Сохранить». При выходе данные не сохраняются. Не забывайте их сохранять перед выходом! Теперь вы можете в любой момент просмотреть сделанные ваши записи, пройдя по пути Дневник – Мой Дневник.
Шифрование
В меню есть пункт «Шифрование», который доступен всем, даже не зарегистрированным в программе пользователям. Интерфейс программы простой, но следует помнить несколько правил: шифруются только строчные буквы, только последовательности цифр, а вместо знака пробела используется символ «_». Кроме того, определитель матрицы шифрования не должен быть равен нулю, т. к. в этом случае обратная матрица для дешифрации не будет существовать.
3.4. Примеры использования программы.
Программу можно использовать как личный дневник, для ведения записей, не предназначенных посторонним лицам. В том числе, в нем можно описывать ход какие-либо разработок, рассуждений, исследований и прочее. Так же программу можно использовать для коллективного обмена записями (в этом случае программа должна быть установлена на компьютере, к которому будут иметь доступ несколько человек), при условии, что все участники обмена будут знать секретные логин и пароль. Для обеспечения лучшей защиты сохраняемую информацию желательно прогонять через шифрующую программу и матрицу шифрования не раскрывать за пределами группы.
И, в конце концов, программу можно использовать как обычный шифратор, не заводя аккаунта в ней.
Пример использования (с обычными и зашифрованными записями)
ЗАКЛЮЧЕНИЕ.
Данная программа позволяет пользователю сохранять свои записи и шифровать их. Кроме того, Secret-Diary может использоваться просто как шифратор без создания аккаунта и входа в систему.
Secret-Diary - отличная программы для тех, кто хочет систематизировать свои заметки, при этом обеспечив конфиденциальность своей информации.
В дальнейшем планируется модернизация программы – добавление в неё новых систем шифрования (для примера таких, как IDEA и RC6), увеличение функциональности при создании записей (возможность оформлять записи разыми шрифтами, вставки картинок и т. д. Так же возможно встраивание функции шифрования двумерных изображений.
В целом, создание программ для защиты информации – сравнительно новая и перспективная область, в которой найдется применение любым, даже самым смелым идеям. И данная курсовая работа – лишь один из множества вариантов осуществления подобных технических задач.
Список использованной литературы:
1. Кнут, Д.Э. Искусство программирования. В 3 т. Т1. Основные алгоритмы: учеб. пособие [пер. с англ.] / Д.Э. Кнут.- 3-е изд.-М. и др.: Вильямс, 2000. -720 с.
2. Бежанова, М.М. Практическое программирование: структуры данных и алгоритмы: учеб. для вузов / М.М. Бежанова, Л.А. Москвина, И.В. Поттосин.- М.: Логос, 2001. - 223
Приложения.
Код блока шифровки и расшифровки текста.
private void button1_Click(object sender, EventArgs e)
{
flag = true;
richTextBox2.Text = "";
// проверяем, задана ли матрица шифрования
if(
textBox1.Text=="" ||textBox2.Text=="" ||textBox3.Text=="" ||
textBox4.Text=="" ||textBox5.Text=="" ||textBox6.Text=="" ||
textBox7.Text=="" ||textBox8.Text=="" ||textBox9.Text==""
) flag=false;
if (flag)
{
//матрица перевеода и обратная к ней begin
matrp[0, 0] = Convert.ToInt32(textBox1.Text);
matrp[0, 1] = Convert.ToInt32(textBox2.Text);
matrp[0, 2] = Convert.ToInt32(textBox3.Text);
matrp[1, 0] = Convert.ToInt32(textBox4.Text);
matrp[1, 1] = Convert.ToInt32(textBox5.Text);
matrp[1, 2] = Convert.ToInt32(textBox6.Text);
matrp[2, 0] = Convert.ToInt32(textBox7.Text);
matrp[2, 1] = Convert.ToInt32(textBox8.Text);
matrp[2, 2] = Convert.ToInt32(textBox9.Text);
det = matrp[0, 0] * matrp[1, 1] * matrp[2, 2] + matrp[0, 1] * matrp[1, 2] * matrp[2, 0] + matrp[0, 2] * matrp[1, 0] * matrp[2, 1]
- matrp[0, 2] * matrp[1, 1] * matrp[2, 0] - matrp[0, 0] * matrp[2, 1] * matrp[1, 2] - matrp[2, 2] * matrp[1, 0] * matrp[0, 1]; // вычисляем определитель матрицы перехода
if (det != 0) //если определитель не равен 0, находим обратную матрицу
{
int[,] matrvrem = new int[3, 3];
matrvrem[0, 0] = (matrp[1, 1] * matrp[2, 2] - matrp[2, 1] * matrp[1, 2]);
matrvrem[0, 1] = -(matrp[1, 0] * matrp[2, 2] - matrp[2, 0] * matrp[1, 2]);
matrvrem[0, 2] = (matrp[1, 0] * matrp[2, 1] - matrp[2, 0] * matrp[1, 1]);
matrvrem[1, 0] = -(matrp[0, 1] * matrp[2, 2] - matrp[2, 1] * matrp[0, 2]);
matrvrem[1, 1] = (matrp[0, 0] * matrp[2, 2] - matrp[2, 0] * matrp[0, 2]);
matrvrem[1, 2] = -(matrp[0, 0] * matrp[2, 1] - matrp[2, 0] * matrp[0, 1]);
matrvrem[2, 0] = (matrp[0, 1] * matrp[1, 2] - matrp[1, 1] * matrp[0, 2]);
matrvrem[2, 1] = -(matrp[0, 0] * matrp[1, 2] - matrp[1, 0] * matrp[0, 2]);
matrvrem[2, 2] = (matrp[0, 0] * matrp[1, 1] - matrp[1, 0] * matrp[0, 1]);
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
matrob[j, i] = matrvrem[i, j];
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
matrob[i, j] /= det;
//матрица перевеода и обратная к ней end
s = richTextBox1.Text;
sp = 0;
n = 0;
if (!radioButton1.Checked && !radioButton2.Checked)
MessageBox.Show("Не выбрано действие(шифровка/дешифровка)");
if (radioButton1.Checked) // шифрование строки
{
shifr2 = true;
if (s == "") shifr2 = false;
if (shifr2)
{
if (s.Length % 3 != 0) //если кол-во символов в строке не кратно 3, приписываем к ней «-»
do
{
s += '-';
}
while (s.Length % 3 != 0);
matrv = new int[s.Length];
do // непосредственно алгоритм шифрования
{
sv = s.Substring(sp, 3); //считываем по три символа
for (int q = 0; q < 3; q++)
{
matrs[q] = sm.IndexOf(sv[q]) + 1; //в специальный массив заносим номер символа в эталонной строке sm
}
for (i = 0; i < 3; i++)
{
sum = 0;
for (j = 0; j < 3; j++)
{
sum += matrp[i, j] * matrs[j];
}
matrv[n] = sum;
n++;
}
// перемножаем матрицу шифрования и матрицу-столбец из 3х символов. Получаем матрицу-столбец зашифрованного текста
sp += 3;
} while (sp != s.Length);
foreach (object a in matrv)
richTextBox2.Text += a + " ";
}
else MessageBox.Show("А шифровать то нечего!");
// срабатывает, если не записан исходный текст
}
if (radioButton2.Checked) // дешифровка
{
shifr = true;
if (s.Length != 0)
{
for (int d = 0; d < s.Length; d++)
if (sm.IndexOf(s[d]) >= 0) shifr = false;
}
else shifr = false; // проверка символов зашифрованного текста на возможность расшифровки (сравнивая с эталонной строкой)
if (shifr)
{
if (s[s.Length - 1] != ' ') s += ' '; // если последний символ не пробел, добавляем его
sl = "";
int g = 0;
for (int d = 0; d < s.Length; d++) // считаем количество пробелов
if (s[d] == ' ') g++;
matrsh = new int[g]; //создаем массив целочисленных элементов
for (int q = 0; q < s.Length; q++)
{
if (s[q] != ' ')
{
sl += s[q];
}
if (s[q] == ' ' || q == s.Length - 1)
{
matrsh[n] = Convert.ToInt32(sl);
sl = "";
n++;
}
// заносим в него числа из зашифрованного текста
}
matrv = new int[matrsh.Length];
n = 0;
sp = 0;
double sum;
do
{
for (i = 0; i < 3; i++)
{
sum = 0;
for (j = 0; j < 3; j++)
{
sum += matrob[i, j] * matrsh[j + sp];
}
matrv[n] = Convert.ToInt32(sum);
n++;
}
// умножаем матрицу-столбец чисел на матрицу, обратную матрицу шифрования
sp += 3;
} while (sp != matrv.Length);
for (i = 0; i < matrv.Length; i++)
{
if (matrv[i] > 0 && matrv[i] < 35)
richTextBox2.Text += sm[matrv[i] - 1];
else if (matrv[i]!=0)
richTextBox2.Text += sm[Math.Abs(matrv[i] % 33)];
}
// переводим полученный результат в символы
} else MessageBox.Show("Сам расшифровывай такую строку!");
}//radiobaton2.checked
}
else MessageBox.Show("Определитель матрицы = 0,пожалуйста введите другие данные");
}
else MessageBox.Show("Введена неправильная матрица,пожалуйста проверьте правильность введённых данных");