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

Шифрование. Аргументы функции MAIN - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Kostia1012
1 / 1 / 0
Регистрация: 17.11.2013
Сообщений: 96
10.12.2013, 19:40     Шифрование. Аргументы функции MAIN #1
Привет всем Нужна помощь... С++...
Аргументы функции MAIN.

Фраза шифруется следующим образом: после первых двух символов вставляется слог БУ,после следующих двух вставляется КА, это повторяется до тех пор, пока в фразе есть хотя бы две буквы. Например, фраза Я ОТ БАБУШКИ УШЕЛ Шифруется так: Я БУОТКА ББУАБКАУШБУКИКА УБУШЕКАЛ. Напишите функции для шифрации и дешифрации некоторого текста. Функции main в качестве аргументов командной строки передавайте kod для кодирования или dekod для декодирования текста. Программу запускайте с переназначением стандартного ввода на файл.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2013, 19:40     Шифрование. Аргументы функции MAIN
Посмотрите здесь:

C++ Аргументы функции main
Аргументы командной строки в функции main C++
Аргументы функции main C++
C++ аргументы функции main()
Аргументы, передаваемые в main C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
16.12.2013, 19:07     Шифрование. Аргументы функции MAIN #21
При всём незнании языка, ты - единственный, кто это хоть как понимает, всем остальным пример одной короткой шифрокки не даёт вообще ничего.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kostia1012
1 / 1 / 0
Регистрация: 17.11.2013
Сообщений: 96
16.12.2013, 19:12  [ТС]     Шифрование. Аргументы функции MAIN #22
Цитата Сообщение от Qwertiy Посмотреть сообщение
Чего? Читал? Прочитай, потом спроси нормально.

Добавлено через 1 минуту

Не знаю, что ты хотел спросить.
Тут просто форум теги окрашивания шрифта не съел. Подразумевалось "encode".

Добавлено через 23 секунды

Что как? Их надо написать. 2 функции: encode и decode.
Ну допишите эти две функции, пожалуйста ну не понимаю я как, что вам стоит...
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
16.12.2013, 19:13     Шифрование. Аргументы функции MAIN #23
Для всех, кроме тебя, это вообще не возможно, так как ты не объяснил шифра.
Qwertiy
817 / 625 / 75
Регистрация: 20.08.2013
Сообщений: 2,525
16.12.2013, 19:16     Шифрование. Аргументы функции MAIN #24
Цитата Сообщение от taras atavin Посмотреть сообщение
всем остальным пример одной короткой шифрокки не даёт вообще ничего
Насколько я понимаю, надо в цикле читать по 2 символа, после них вставлять чередуя "БУ" или "КА". Это для шифрования.
А для дешифрования - просто выкинуть символы в позициях 3, 4, 7, 8, 11, 12 и т. д.
Но у меня нет желания это писать.
Kostia1012
1 / 1 / 0
Регистрация: 17.11.2013
Сообщений: 96
16.12.2013, 19:18  [ТС]     Шифрование. Аргументы функции MAIN #25
Цитата Сообщение от taras atavin Посмотреть сообщение
Для всех, кроме тебя, это вообще не возможно, так как ты не объяснил шифра.
Да как это невозможно? Ведь все, что должна делать программа, написано в самом начале...

Фраза шифруется следующим образом: после первых двух символов вставляется слог БУ,после следующих двух вставляется КА, это повторяется до тех пор, пока в фразе есть хотя бы две буквы. Например, фраза Я ОТ БАБУШКИ УШЕЛ Шифруется так: Я БУОТКА ББУАБКАУШБУКИКА УБУШЕКАЛ. Напишите функции для шифрации и дешифрации некоторого текста. Функции main в качестве аргументов командной строки передавайте kod для кодирования или dekod для декодирования текста. Программу запускайте с переназначением стандартного ввода на файл.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
16.12.2013, 19:18     Шифрование. Аргументы функции MAIN #26
Далеко не факт, что там такой примитив.
Kostia1012
1 / 1 / 0
Регистрация: 17.11.2013
Сообщений: 96
16.12.2013, 19:21  [ТС]     Шифрование. Аргументы функции MAIN #27
Цитата Сообщение от Qwertiy Посмотреть сообщение
Насколько я понимаю, надо в цикле читать по 2 символа, после них вставлять чередуя "БУ" или "КА". Это для шифрования.
А для дешифрования - просто выкинуть символы в позициях 3, 4, 7, 8, 11, 12 и т. д.
Но у меня нет желания это писать.
Для вас это три минуты делов, вы сами это понимаете, ну помогите уж человеку, пожалуйста... С вас ведь ничего не убудет...(
Qwertiy
817 / 625 / 75
Регистрация: 20.08.2013
Сообщений: 2,525
16.12.2013, 19:21     Шифрование. Аргументы функции MAIN #28
Возможно и не такой, но описано именно так. И примеру соответствует.

PS: При реализации надо не забыть, что файл не обязан состоять из чётного числа символов. Дополнительно можно вспомнить, что в текстовом режиме последовательность "\r\n" заменяется на "\n" при чтении и записи, так что видимо она будет считаться за 1 символ. Перевести входной потой в бинарный режим ведь не получится без его переоткрытия, а переоткрытие поломает перенаправление, верно?
Kostia1012
1 / 1 / 0
Регистрация: 17.11.2013
Сообщений: 96
16.12.2013, 19:25  [ТС]     Шифрование. Аргументы функции MAIN #29
Цитата Сообщение от taras atavin Посмотреть сообщение
Далеко не факт, что там такой примитив.
Да, там просто... Это знакомство, так сказать, с данной темой...
Т.к. Я новичок, я не могу справиться сам...

Добавлено через 2 минуты
Цитата Сообщение от Qwertiy Посмотреть сообщение
Возможно и не такой, но описано именно так. И примеру соответствует.

PS: При реализации надо не забыть, что файл не обязан состоять из чётного числа символов. Дополнительно можно вспомнить, что в текстовом режиме последовательность "\r\n" заменяется на "\n" при чтении и записи, так что видимо она будет считаться за 1 символ. Перевести входной потой в бинарный режим ведь не получится без его переоткрытия, а переоткрытие поломает перенаправление, верно?
Напишите, прошу...
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
17.12.2013, 07:58     Шифрование. Аргументы функции MAIN #30

Не по теме:

Я начинал с ксорки. Она и в реализации проще, и вскрыть её, даже зная алгоритм, сложно. Ксорка - шифр битовых манипуляций, основанный на операции исключающее или. Простейшая ксорка есть применение исключающего с однобайтным ключом для каждого байта сообщения. Но такой вариант вскрывается на примере шифра одного байта: достаточно применить ту же операцию к исходному байту с шифрованным и получишь ключ. Более надёжную защиту обеспечивают длинные ключи с выборкой фрагмента ключа. Но накладывать ксорки с ключами равной длины, фрагменты которых чередуются по одному алгоритму, бесполезно: вся цепочка ксорок будет эквивалентна одной, ключ которой есть шифр остальных ключей друг другом. Если применять только ксорку, то она должна обеспечить стойкость за один раз, или она не годна. Но можно комбинировать её с перестановочными шифрами. Простейшим перестановочным шифром является скитала. Для скиталы применяется двумерный массив, линерализуемый дважды с разным порядком индексов. Массив заполняется исходным сообщением, или фрагментом сообщения фиксированного размера, при дефиците символов сразу за последним символом пишется терминальный, оставшиеся элементы заполняются мусором. А потом из этого массива читается шифрованная версия сообщения. Причём, при заполнении массива он линерализуется с одним порядком индексов, а при чтении оттуда шифрованной версии с другим. Например, можно при заполнении массива считать первый индекс младшим, а второй старшим, а при чтении наоборот. А можно при заполнении первый индекс считать старший, второй младшим, а при чтении шифрованной версии наоборот. Пусть используется массив s[N][M], обозначим k индекс линерализованного массива, i - первый индекс, j - второй. Тогда имеем две формулы: k=i+j*N (первый индекс младший, второй старший) и k=i*M+j (первый индекс старший, второй младший). При заполнении массива юзается одна, при чтении шифрованной версии другая. При расшифровке такой же массив заполняется шифрованной версией сообщения, а потом из него читается расшифрованная, при этом применяются те же самые две формулы линерализации, но в обратном порядке. Это тоже простой, но трудно вскрываемый шифр. Даже зная алгоритм, его сложно вскрыть, нужны точные размеры массива и порядок индексов при заполнении массива исходным сообщением. К сожалению, скитала может быть вскрыта на примере достаточно длинной шифровки, к которой есть исходное сообщение. А при ещё большей длине даже без исходного сообщения. Но не так просто, как ксорка. Теоретически не вскрываемы только шифры, чьи ключи содержат как минимум столько же информации, сколько её с их помощью шифруется.



Добавлено через 5 минут

Не по теме:

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



Добавлено через 2 минуты

Не по теме:

И это был алгоритм шифрования с ключом.

SatanaXIII
17.12.2013, 09:29
  #31
 Комментарий модератора 
Если кто хочет поведать истории бурной молодости, то для этого нужно создать отдельную тему.

Задание озвучено. В дальнейшем прошу отвечать только кодом.
Kostia1012
1 / 1 / 0
Регистрация: 17.11.2013
Сообщений: 96
17.12.2013, 16:13  [ТС]     Шифрование. Аргументы функции MAIN #32
Ну помогите... Ну пожалуйста...
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
17.12.2013, 19:55     Шифрование. Аргументы функции MAIN #33
Kostia1012, что-то я не наблюдаю какой-то реальной активности с вашей стороны. За неделю, с момента создания темы, хоть какие-то попытки решить задачу у вас были? Хотя бы тот пример, который вам привели вы разобрали и запустили программу? Где вопросы по теме?
И определитесь с тем, что собираетесь использовать для работы с текстом char[] или std::string(используя std::string решить задачу будет проще).
Qwertiy
817 / 625 / 75
Регистрация: 20.08.2013
Сообщений: 2,525
17.12.2013, 20:32     Шифрование. Аргументы функции MAIN #34
Цитата Сообщение от rangerx Посмотреть сообщение
И определитесь с тем, что собираетесь использовать для работы с текстом char[] или std::string(используя std::string решить задачу будет проще).
Не согласен принципиально. Поставленная задача решается посимвольным считыванием через getchar. Строки ни в каком виде не требуются.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
17.12.2013, 21:43     Шифрование. Аргументы функции MAIN #35
Цитата Сообщение от Qwertiy Посмотреть сообщение
Не согласен принципиально. Поставленная задача решается посимвольным считыванием через getchar. Строки ни в каком виде не требуются.
Предлагаете всё делать на лету? И как вы собираетесь всё это дело потом дешифровывать? В условии задачи речь идёт, как я понимаю, о шифрации и дешифрации фразы(для простоты можно считать, что имеется в виду строка). Как вы предлагаете на лету, определять зашифрована фраза или нет, удалять все соответствующие слоги, что под руку поподут?
Qwertiy
817 / 625 / 75
Регистрация: 20.08.2013
Сообщений: 2,525
17.12.2013, 21:59     Шифрование. Аргументы функции MAIN #36
Цитата Сообщение от rangerx Посмотреть сообщение
удалять все соответствующие слоги
Эм.. Какие слоги? Ничего в задании про слоги нет.

Цитата Сообщение от rangerx Посмотреть сообщение
Как вы предлагаете на лету, определять зашифрована фраза или нет
Зачем это определять? Команда шифровать или расшифровывать передаётся как аргумент командной строки.

Цитата Сообщение от rangerx Посмотреть сообщение
И как вы собираетесь всё это дело потом дешифровывать?
Примерно так:
C++
1
2
3
4
5
int ch, i;
 
for(i=0; ~(ch=getchar()); ++i)
  if(!(i&2))
    putchar(ch);
schdub
 Аватар для schdub
2902 / 1246 / 222
Регистрация: 19.01.2009
Сообщений: 3,210
Завершенные тесты: 1
18.12.2013, 01:55     Шифрование. Аргументы функции MAIN #37
Одно из возможных решений для латиницы:
C++
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <iostream>
#include <string>
#include <cstring>
 
struct IState { virtual void doWork() const = 0; };
 
struct ShowUsage : public IState { void doWork() const {
    std::cout << "USAGE: path_to_my_cool_crypt_prog kod|dekod\n" 
              << "       kod   - encode passphrase\n"
              << "       dekod - decode passphrase\n"
              << std::endl;
}};
 
struct SecretsHolder {
    SecretsHolder() : midx(gvery_secret_strings_max) {}
    const std::string & getNextSecretString() const {
        if ((++midx) >= gvery_secret_strings_max) {
            midx = 0;
        }
        return gvery_secret_strings[midx];
    }
private:
    static  std::string gvery_secret_strings[];
    static  unsigned    gvery_secret_strings_max;
    mutable unsigned    midx;
};
std::string SecretsHolder::gvery_secret_strings[] = {
    "BU", "KA" // ... etc
};
unsigned SecretsHolder::gvery_secret_strings_max =
    sizeof(gvery_secret_strings) / sizeof(*gvery_secret_strings);
 
struct Encoder : IState, SecretsHolder { void doWork() const {
    std::string phrase, encoded;
    std::getline(std::cin, phrase);
    unsigned alpha_count = 0;
    for (std::string::iterator i = phrase.begin(); i != phrase.end(); ++i) {
        encoded.push_back(*i);
        if (isalpha(*i) && (++alpha_count) >= 2) {
            alpha_count = 0;
            encoded.append(getNextSecretString());
        }
    }
    std::cout << encoded << std::endl;
}};
 
struct Decoder : IState, SecretsHolder { void doWork() const {
    std::string phrase, decoded;
    std::getline(std::cin, phrase);
    unsigned alpha_count = 0;
    for (std::string::iterator i = phrase.begin(); i != phrase.end(); ++i) {
        decoded.push_back(*i);
        if (isalpha(*i) && (++alpha_count) >= 2) {
            alpha_count = 0;
            i += getNextSecretString().length();
        }
    }
    std::cout << decoded << std::endl;
}};
 
const IState & parseArgs(int argc, char ** argv) {
    if (argc >= 2) {
        if (!strcmp(argv[1], "kod")) {
            return Encoder();
        } else if (!strcmp(argv[1], "dekod")) {
            return Decoder();
        }
    }
    return ShowUsage();
}
    
int main(int argc, char ** argv) { parseArgs(argc, argv).doWork(); }
Пример запуска на моей машине:
Bash
1
2
3
4
5
6
7
8
$ g++ -g -Wall a.cpp -o crryptt
$ ./crryptt kod < enc.txt 
sjBUskKAdjBUfkKAsdBU sdKAkfBUj sKA dkBUfsKAjdBUkfKA sdBUkfKAD DBUDDKAFDBUkdKAjfBUskKA d
$ ./crryptt dekod < dec.txt 
sjskdjfksd sdkfj s dkfsjdkf sdkfD DDDFDkdjfsk d
$ cat enc.txt dec.txt
sjskdjfksd sdkfj s dkfsjdkf sdkfD DDDFDkdjfsk d
sjBUskKAdjBUfkKAsdBU sdKAkfBUj sKA dkBUfsKAjdBUkfKA sdBUkfKAD DBUDDKAFDBUkdKAjfBUskKA d
Qwertiy
817 / 625 / 75
Регистрация: 20.08.2013
Сообщений: 2,525
18.12.2013, 10:04     Шифрование. Аргументы функции MAIN #38

Не по теме:

Нашёлся любитель паттернов... И не лень столько писать вместо пары простых функций.



Цитата Сообщение от schdub Посмотреть сообщение
Одно из возможных решений
Мда.. Он твой код вообще не поймёт

Цитата Сообщение от schdub Посмотреть сообщение
для латиницы
В примере же чётко через 2 символа и пробелы тоже считаются.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
18.12.2013, 16:04     Шифрование. Аргументы функции MAIN #39
Цитата Сообщение от Qwertiy Посмотреть сообщение
Эм.. Какие слоги? Ничего в задании про слоги нет.
Я имел в виду слоги, которыми шифруется строка
после первых двух символов вставляется слог БУ, после следующих двух вставляется КА
Цитата Сообщение от Qwertiy Посмотреть сообщение
Зачем это определять? Команда шифровать или расшифровывать передаётся как аргумент командной строки.
Цитата Сообщение от Qwertiy Посмотреть сообщение
Примерно так:
Т.е. практически, как я думал, вы собираетесь удалять из текста все символы 2 через 2, назависимо от того, как там шифрует функция encode. Не знаю, может быть TC и устроит такой вариант...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2013, 16:27     Шифрование. Аргументы функции MAIN
Еще ссылки по теме:

C++ аргументы main
Аргументы для функции main() C++
C++ Аргументы функции main

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

Или воспользуйтесь поиском по форуму:
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
18.12.2013, 16:27     Шифрование. Аргументы функции MAIN #40
Цитата Сообщение от Qwertiy Посмотреть сообщение
Нашёлся любитель паттернов..
Скорее антипаттернов)
Интерфейс IState с методом doWork, который теоретически может означать все что угодно - это тот еще номер. Желание свести классы кодера и декодера к одному интерфейсу как минимум надуманое. В остальной код не вчитывался.
Yandex
Объявления
18.12.2013, 16:27     Шифрование. Аргументы функции MAIN
Ответ Создать тему
Опции темы

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