Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.95/42: Рейтинг темы: голосов - 42, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 27.02.2009
Сообщений: 14
1

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

18.05.2009, 08:17. Показов 8007. Ответов 7
Метки нет (Все метки)

Здравствуйте. В связи с рядом причин(главная конечно лень 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м пункте меню желательно сделать запрос на размер\количество символов создаваемого файла.

Ну и конечно, если у кого-то есть готовые части\идеи - прошу поделиться .)
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.05.2009, 08:17
Ответы с готовыми решениями:

Курсовая программа "Шифрование текста 5 алгоритмами"
Нужно написать курсовую программу на тему "Шифрование текста 5 алгоритмами". Поиски выполнения уже...

Шифрование текста, табличная замена текста
Один из простейших способов шифровки текста состоит в табличной замене каждого символа другим...

Шифрование текста
необходимо создать программу что бы зашифровать и расшифровать данный текст путем замены буквы на...

Шифрование текста
Здравствуйте, пытаюсь зашифровать слово, через ключ. #include <iostream> using namespace std;...

7
27 / 27 / 10
Регистрация: 29.04.2009
Сообщений: 90
18.05.2009, 09:31 2
если не обязательно делать консольное приложение сделай mfc приложения (в ms vc) или просто windows приложение если разработка будет в borland c++, там ни чего сложного дело пары минут.

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

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

чтение и запись для шифрования и дешифрования проводится одинаково (выбирается лишь функция обработки строки по строке)
0
27 / 27 / 10
Регистрация: 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 (есть насколько помню стандартная функция)
0
4855 / 3276 / 467
Регистрация: 10.12.2008
Сообщений: 10,570
18.05.2009, 10:49 5
тут пример, как можно, юзая одну функцию, менять её свойства с помощью функций, передаваемых в неё
0
Вложения
Тип файла: zip chars_in_line.zip (684 байт, 171 просмотров)
27 / 27 / 10
Регистрация: 29.04.2009
Сообщений: 90
18.05.2009, 11:03 6
ИМХО при синхронном шифровании можно просто сделать это в 2 функциях: 1) чтение символа из исходного файла и запись его после шифровки/дешифровки в другой файл 2) шифрование/дешифровка символа
Для 1-ой функции при шифровки и дешифровки меняем просто местами исходный и выходной файл, а для 2-ой смотри мое сообщение выше.
Просто мне кажется так проще и преподаватель будет меньше придераться (хотя это зависит от преподавателя и его отношения к данному студенту)
0
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.
Вроде, похож на правду. Нужно будет повникать в него и попробовать переделать под себя.
На этом пока все.)
0
0 / 0 / 0
Регистрация: 01.11.2010
Сообщений: 11
22.12.2010, 22:19 8
Это на Раskal, а как на С++ перевести?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.12.2010, 22:19

Простое шифрование текста
Здравствуйте! Решаю несложную задачу, но почему-то ошибка во втором тесте. Вот ссылка на задачу:...

Шифрование текста в файле
проблема в то что в процессе работы программа должна считывать текст в файле и кодировать его....

Шифрование и дешифрование текста
Народ вот програма для шифрования текста мне нужно переделать так штоб били подпрограми: 1) на...

Шифрование текста. XOR
Помогите с шифрование текста...с числоми вроде получалось. Что значит эта ошибка и как ее...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.