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

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

18.05.2009, 08:17. Показов 9055. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.05.2009, 08:17
Ответы с готовыми решениями:

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

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

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

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

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

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

чтение и запись для шифрования и дешифрования проводится одинаково (выбирается лишь функция обработки строки по строке)
0
27 / 27 / 10
Регистрация: 29.04.2009
Сообщений: 90
18.05.2009, 10:39
примерно так
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
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
18.05.2009, 10:49
тут пример, как можно, юзая одну функцию, менять её свойства с помощью функций, передаваемых в неё
Вложения
Тип файла: zip chars_in_line.zip (684 байт, 171 просмотров)
0
27 / 27 / 10
Регистрация: 29.04.2009
Сообщений: 90
18.05.2009, 11:03
ИМХО при синхронном шифровании можно просто сделать это в 2 функциях: 1) чтение символа из исходного файла и запись его после шифровки/дешифровки в другой файл 2) шифрование/дешифровка символа
Для 1-ой функции при шифровки и дешифровки меняем просто местами исходный и выходной файл, а для 2-ой смотри мое сообщение выше.
Просто мне кажется так проще и преподаватель будет меньше придераться (хотя это зависит от преподавателя и его отношения к данному студенту)
0
0 / 0 / 0
Регистрация: 27.02.2009
Сообщений: 14
03.06.2009, 07:28  [ТС]
Здравствуйте ещё раз. Извиняюсь за долгое отсутствие - сдохла видюха на компе, жду зарплаты, дабы купить новую .)
Насчет срока - уже в принципе курсовая просрочена, самый крайний срок - 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
Это на Раskal, а как на С++ перевести?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.12.2010, 22:19
Помогаю со студенческими работами здесь

Шифрование текста
Здравствуйте, пытаюсь зашифровать слово, через ключ. #include &lt;iostream&gt; using namespace std; int main() { char str =...

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

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

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

Шифрование текста. XOR
Помогите с шифрование текста...с числоми вроде получалось. Что значит эта ошибка и как ее испрвить?..) #include &lt;iostream&gt; ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru