Форум программистов, компьютерный форум CyberForum.ru

Курсовая: шифрование текста. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 46, средняя оценка - 4.87
Pumus
0 / 0 / 0
Регистрация: 27.02.2009
Сообщений: 14
18.05.2009, 08:17     Курсовая: шифрование текста. #1
Здравствуйте. В связи с рядом причин(главная конечно лень xD ), свою курсовую я умудрился взять только сейчас. Сдача через 2 недели. Собственно, в этой теме я буду пробовать ее сделать и прошу помощи и критики .)
Так как в программировании я не силен, поэтому по возможности буду стараться использовать чужой код, доработанный до моих грязных нужд ж)
Итак, тема курсовой работы - шифрование и дешифровка текстовой строки. Мои идеи по этому поводу: пока что в качестве алгоритма я выбрал Шифр Гронсфельда, если я правильно помню. Его суть - имеется файл рандомных чисел (key.txt) примерно на пару мегабайт, который раздается двум людям - отправителю и получателю. При шифровке текста к номеру каждой буквы последовательно прибавляется по числу из имеющегося файла и получившиеся буквы записываются в новый файл.(Т.е. допустим, что в нашем файле key.txt такая строка: 123456789, а в файле, который нужно зашифровать - абя. В итоге, мы имеем - номер а=1, на выходе - 1+1=2=б. Номер б=2, на выходе - 2+2=4=г. Номер я=33, на выходе - 33+3=36; 36-33(чтобы начать алфавит сначала)=3=в. В конечном файле - бгв. При дешифровке - обратный процесс. Причем после шифровки\дешифровки из файла-ключа вырезаются использованные символы. Т.е. В итоге, он будет выглядеть так: 456789).
Как я вижу полную работу будущей программы:
При запуске появляется меню вида:
---------------------
|Создать ключ |
---------------------
|Зашифровать файл |
---------------------
|Дешифровать файл|
---------------------

При выборе первого пункта, программа создает файл key.txt весом в пару мегабайт.
При выборе второго пункта, программа просит указать шифруемый файл и key.txt, после чего по описанному мной алгоритму, шифрует файл и вырезает из key.txt "использованные" числа.
При выборе третьего пункта - программа просит указать дешифруемый файл и key.txt, послу чего дешифрует и опять же вырезает "использованные" числа из key.txt.

Основные мысли и наработки я собираюсь постить сюда чуть позже, а пока что пара мелких идей и замечаний, скорее для себя.):
1) Я вообще не знаю, как работать с меню. В это нужно будет пофтыкать.
2) При шифровке нужно что-то делать с пробелами. Или ничего .)
3) В 1м пункте меню желательно сделать запрос на размер\количество символов создаваемого файла.

Ну и конечно, если у кого-то есть готовые части\идеи - прошу поделиться .)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2009, 08:17     Курсовая: шифрование текста.
Посмотрите здесь:

шифрование текста в файле C++
C++ Задача на шифрование текста, язык Cи.
шифрование текста C++
Шифрование текста. XOR C++
Шифрование текста C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mikutu
26 / 26 / 2
Регистрация: 29.04.2009
Сообщений: 90
18.05.2009, 09:31     Курсовая: шифрование текста. #2
если не обязательно делать консольное приложение сделай mfc приложения (в ms vc) или просто windows приложение если разработка будет в borland c++, там ни чего сложного дело пары минут.

Добавлено через 2 минуты 7 секунд
да есть готовые классы для шифрования текста (тебе наверно нужено синхронное шифрование).
Уточни конкретно на чем будешь писать будет легче помочь.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
18.05.2009, 10:18     Курсовая: шифрование текста. #3
Код
---------------------
|Создать ключ |
---------------------
|Зашифровать файл |
---------------------
|Дешифровать файл|
---------------------
это слишком обще (всё равно, что "начать программу, продолжать программу, закончить программу")
сначала нужно дойти до дна, а дно там на зашифровывании одной буквы и расшифровывании, потом со дна подниматься наверх - тогда пойдёт дело
чтобы накрыть дом крышей, сперва нужно заложить фундамент

сперва нужна функция, которая принимает символ ключа, символ и возвращает полученный из них код, на ней построишь кодирование символьной строки по ключевой строке (файлы можно будет читать построчно и подавать строки на кодирование по строкам) и это для шифрования только (если не будешь заморачиваться с передачей указателя на функцию в функцию (такая тема используется в qsort, когда в функцию передаётся указатель на функцию сравнения), надо будет написать две функции: одну для шифрования строки, другую - для расшифровки)
так было бы очень удобно написать одну функцию обработки строки по строке, а внутрь передавать указатель либо на функцию шифрования символа, либо на функцию дешифрования символа (но походу придётся две функции писать, судя по плану программы, можешь не потянуть указатели (особенно вдруг переделать там чего-нибудь потом или добавить - попадёшь))

чтение и запись для шифрования и дешифрования проводится одинаково (выбирается лишь функция обработки строки по строке)
mikutu
26 / 26 / 2
Регистрация: 29.04.2009
Сообщений: 90
18.05.2009, 10:39     Курсовая: шифрование текста. #4
примерно так
char shifr(char bukva, int chislo, int oper)
oper = 1 - шифрование
oper = -1 - дешифрация
Да при подходе что я(33)+3=36
36-33=3(в)
обратно так
в(3)-3=0
33-0=33(я)
в проге объядинить строки 36-33 и 33-0 легче всего так
mod(rez-33), где mod это модуль числа.
да вообще ограничиваться 33 символами весьма странно, лучше ограничиться 256 (от 0 до 255) и брать номер символа в соответствии с его номером в таблице ASCII (есть насколько помню стандартная функция)
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
18.05.2009, 10:49     Курсовая: шифрование текста. #5
тут пример, как можно, юзая одну функцию, менять её свойства с помощью функций, передаваемых в неё
Вложения
Тип файла: zip chars_in_line.zip (684 байт, 165 просмотров)
mikutu
26 / 26 / 2
Регистрация: 29.04.2009
Сообщений: 90
18.05.2009, 11:03     Курсовая: шифрование текста. #6
ИМХО при синхронном шифровании можно просто сделать это в 2 функциях: 1) чтение символа из исходного файла и запись его после шифровки/дешифровки в другой файл 2) шифрование/дешифровка символа
Для 1-ой функции при шифровки и дешифровки меняем просто местами исходный и выходной файл, а для 2-ой смотри мое сообщение выше.
Просто мне кажется так проще и преподаватель будет меньше придераться (хотя это зависит от преподавателя и его отношения к данному студенту)
Pumus
0 / 0 / 0
Регистрация: 27.02.2009
Сообщений: 14
03.06.2009, 07:28  [ТС]     Курсовая: шифрование текста. #7
Здравствуйте ещё раз. Извиняюсь за долгое отсутствие - сдохла видюха на компе, жду зарплаты, дабы купить новую .)
Насчет срока - уже в принципе курсовая просрочена, самый крайний срок - 23 июня. Зарплату дадут числа 15 так ж)
Пока что буду писать курсовую в универе\интернет-кафе\у друзей.
Писать буду на с++, консольном. Ибо весь семестр проходили именно его .)
Основные идеи: мне уже не до вылизанного кода, поэтому буду делать все элементарно, благо препод не придирчив. Работает - и то хорошо .)
Менюшку буду делать через if-then-else. Т.е. Будет выдавать примерно такое:
"1) Создать ключ
2) Зашифровать
3) Дешифровать
Пожалуйста, введите номер действия:"
Это не сильно красиво и удобно, но для моих кривых рук - самое то %)
Далее. Сам шифратор\дешифратор будет работать элементарно - брать символ из файла, добавлять к его номеру число из ключа и так далее. Дешифратор соответственно обратно. Сделаю это двумя функциями пока, ибо пока что нужно как можно быстрее.)
Ну собственно пока все, буду делать потихоньку.

Так, вот ещё немного... Я нашёл в соседней теме по паскалю алгоритм:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
function GronsfeldEncipher(toCode, K: string): string;
var i, T, _T: integer;
begin
  for i := 1 to length(toCode) do begin
    _T := ord(toCode[ i ]);
 
    T := (Ord(toCode[ i ])
 
      +
      (Ord(K[(pred(i) mod length(K)) + 1]) - Ord('0'))
 
         );
 
    if T >= 256 then dec(T, 256);
    toCode[ i ] := Chr(T);
  end;
  GronsfeldEncipher := toCode;
end;
 
function GronsfeldDecipher(toDecode, K: string): string;
var i, T: integer;
begin
  for i := 1 to length(toDecode) do begin
    T := (Ord(toDecode[i])
 
      -
      (Ord(K[(pred(i) mod length(K)) + 1]) - Ord('0'))
 
         );
    if T < 0 then Inc(T, 256);
    toDecode[ i ] := Chr(T);
  end;
  GronsfeldDecipher := toDecode;
end;
 
var
  s: string;
 
begin
  s := GronsfeldEncipher('INFORMATION', '2178');
  writeln(s);
  writeln('s = ', GronsfeldDecipher(s, '2178'));
end.
Вроде, похож на правду. Нужно будет повникать в него и попробовать переделать под себя.
На этом пока все.)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2010, 22:19     Курсовая: шифрование текста.
Еще ссылки по теме:

Шифрование текста C++
Курсовая программа "Шифрование текста 5 алгоритмами" C++
Написать программу: шифрование текста C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
vasim3
0 / 0 / 0
Регистрация: 01.11.2010
Сообщений: 11
22.12.2010, 22:19     Курсовая: шифрование текста. #8
Это на Раskal, а как на С++ перевести?
Yandex
Объявления
22.12.2010, 22:19     Курсовая: шифрование текста.
Ответ Создать тему
Опции темы

Текущее время: 18:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru